最近在自学SSH框架,本来以为Struts2中的上传很简单,结果,花了一晚上才弄出来。
一直有两个问题,一个是
No result defined for action XXX and result input
这个问题引起的原因有很多,在我这里的情况是,上传的form表单默认的是文本数据,只要加入
enctype="multipart/form-data"
就好了。
另外一个问题是一直获取不到String filename,但是File file却可以获取,看了好多的实例,才发现是不仔细的问题。
除了第一个File类型的字段的set方法还是以常规的方式命名,另两个String类型的字段的set方法必须分别以“File字段的set方法名+FileName”和“File字段的set方法名+ContentType”来命名。
所以,在方法里面应该写成
// 封装上传文件域的属性
private File bookFile;
// 封装上传文件类型的属性
private String contentType;
// 封装上传文件名的属性
private String fileName;
public void setBookFile(File bookFile) {
this.bookFile = bookFile;
}
public void setBookFileContentType(String contentType) {
this.contentType = contentType;
}
public void setBookFileFileName(String fileName) {
this.fileName = fileName;
}
另外,上传为文件名为中文的时候,保存的文件会乱码,这个问题只要把页面和struts.xml的编码都设为GBK就好了。
<constant name="struts.i18n.encoding" value="GBK"/>