使用struts2的输入校验
字段校验器 配置风格
<field name=”被校验的字段”>
<field-validator type=”校验器名”>
<param name=”参数名”>参数值</param>
<message/>
</field-validator>
</field>
每个field元素指定Action必须遵守的准则,name属性指定校验字段,如果该属性需要多个规则,则在该field下面添加多个.该元素可以包含多个子元素来指定校验器参数。另外每个必须指定用来提示不满足规则的提示信息。
非字段校验器配置
<validator type=”校验器名”>
<param name=”fileName”>需要被校验的字段</param>…
<message/>
</validator>
使用strurts2 控制文件上传
Struts2 默认使用的是Jakarta 的Common-FileUpload的文件上传框架,如需要使用struts2的文件上传功能,就要添加俩个jar包。Commons-io-x.x 和Commons-fileUpload-x.xx。
步骤:1、画表单2、写Action。属性 有 表单中的name属性 以及uploadFileName、uploadContentType。其中uploadFileName封装上传文件的文件名,uploadContentType用于封装上传文件的类型。可以认为如果一个文件域包含一个属性名为xxx,那么Action就需要File xxx; String xxxFileName;String xxxContentType;来封装这个文件。还包含了savePath成员变量。该成员变量的值通过配置文件来设置。如下图所示
手动实现文件过滤
Web应用不允许浏览者*上传,尤其不能上传可执行文件,还对文件大小可能还会有限制,因此文件上传必须过滤。主要是在Action里添加 filterTypes()方法。如下
public String filterTypes(String[] types) {
String fileType = getUploadContentType();
for(String type:types) {
if(type.equals(fileType)) {
return null;
}
}
return ERROR;
}
public void validate() {
String filterResult = filterTypes(allowTypes.split(","));
if(filterResult!= null) {
addFieldError("upload", "上传的文件不符合规定");
}
}
其中allowTypes 是一个可以在struts.xml文件中配置的参数。标明了允许上传的文件类型。
最后结果图可能如图
其实还有更简单的方法 那就是在struts.xml文件中配置拦截器。
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/png,image/gif</param>
<param name="maximumSize">20</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
当出错提示信息为英文 时,可以加入mess.properties文件 来使资源国际化。当然需要在struts.xml文件中配置。如下
<constant name="struts.custom.i18n.resources" value="mess"></constant>
结果如下图