黑体部分应为“\”,否则回导致action中的自动封装数据失败,从而导致validate中验证出现空指针“NullPointer”
另外:
<constant name="struts.multipart.saveDir" value="/temp" /> 将上传的临时文保存到D:/temp,而不是项目的WebAppRoot+/temp 下
原因解释:
当你配置"struts.multipart.saveDir"时,struts会将目录定向为:
- if (saveDir != null) {
- fac.setRepository(new File(saveDir));
- }
- if (saveDir != null) {
- fac.setRepository(new File(saveDir));
- }
当"struts.multipart.saveDir"为“/temp”时,很容易验证 :
new File("/temp").getAbsolutePath();
为当前的根目录下的temp目录。
当你使用相对路径比如 "myproject/temp"配置时,效果依然不行。因为
new File(相对路径) 得到的结果是:
user.dir + 相对路径
在Tomcat下user.dir是 Tomcat目录下的bin目录,所以上述路径最终是:
Tomcat/bin/myproject/temp
( 不要试图使用 ../webapps/myproject/temp , 这样是不成功的)。
解决办法2个,个人爱好自选:
1、更改user.dir的默认值。
在系统启动的时候,用ServletContextListener修改系统属性。
System.setProperty("user.dir","你的Tomcat的目录下的webapps");
然后在配置:
- <constant name="struts.multipart.saveDir" value="yourproject/temp"></constant>
- <constant name="struts.multipart.saveDir" value="yourproject/temp"></constant>
2、直接了当:
- <constant name="struts.multipart.saveDir" value="绝对路径"></constant>