关于struts2的文件上传非空校验
blogzhoubo
2010-11-14
大家都知道,用struts2的fileUpload拦截器可以对上传文件的大小和类型进行校验,但是好像没有对文件选择框的非空校验(JSP页面里什么文件也不选择,直接提交表单)。所以让Action类继承ActionSupport类,在重写的validate()方法里进行非空校验。但是有一个问题就是,当拦截器的校验没有通过的时候(如:文件过大或者文件类型不对),仍然会调用validate()方法,这时因为file对象被拦截器置为null了,所以即使在JSP页面里选择了文件,validate仍然会认为是没有选择文件。
现在的解决方法是:在判断file是否为空之前,先检测一下是否已经有fielderror被加入Map里了。不知各位有没有别的更好的方法? UploadAction.java: public class UploadAction extends ActionSupport{ private File file; public File getFile() { return file; } public void setFile(File file) { this.file = file; } public void validate(){ if(getFieldErrors().isEmpty()){ if(file == null){ this.addFieldError("file",this.getText("file.required")); } } } upload.jsp: <body> <s:form action="upload" method="post" enctype="multipart/form-data" namespace="/"> <tr> <td>上传文件:<s:file name="file"></s:file></td> </tr> <tr> <td><s:submit name="submit" value="提交"></s:submit></td> </tr> </s:form> </body> |
|
songqi1984
2010-11-16
不知可不可以用jquery.validate.min.js脚本实现。
$('file').validate({ rules: {file: "required"}, messages: {file: "请选择上传文件"} }); |
|
forchase
2010-11-19
直接通过配置文件验证更简单,假如你的Action名是A,方法名是B,那么配置文件名可以这么写:
A-B-validation.xml 验证文件是否为空的部分: <field name="file"> <field-validator type="required" short-circuit="true"> <message>请选择要上传的文件</message> </field-validator> |