struts2 输入校验 (三)
?
五、 内建校验器
?
? Struts 2 提供了大量的内建校验器,可以满足大部分应用校验需求。如果应用需要特别复杂的校验需求,开发者可以开发自己的校验器
?
?
1. 注册校验器
? xwork-2.1.2.jar 文件 , com/opensymphony/xwork2/validator/validators 路径下有个 default.xml,这个是 Struts 2 默认的校验器注册文件
?
?上面并未指定 User 类里各字段的校验规则。因此,必须为 User 类指定对应校验规则文件。
?
注意: 如果 appendPrefix = true 则表示校验失败的 message 中,会加上 “用户的:” 前缀,否则将不会添加前缀
?
默认情况下,该校验文件的规则文件名为 User-validation.xml,因为配置了 Visitor 校验器时指定了 context 为 userContext,则该校验文件的文件名为 User-userContext-validation.xml。
?
User-userContext-validation.xml
?
从上面配置文件中可以看出,这个 User-userContext-validation.xml 文件的内容与之前校验 Action 的校验文件完全相同,通过这种方式就可以对 Action 里复合类型的属性进行校验了。
?
因为 Action 里的属性不再是基本数据类型,而是 User 类型的属性,则将 JSP 页面进行简单的修改:
?
regist.jsp
??
?
11. 转换校验器
?
名称: conversion, 它检查被校验字段在类型转换过程中是否出现错误
参数:
???? fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
??????????????????????????????????????? 则无需指定该参数
???? repopulateField:指定当类型转换失败后,返回 input 页面时,类型转换
???????????????????????????????????????????????? 失败的表单域是否保留原来的错误输入。
?
?
非字段校验器风格:
import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.validator.annotations.*;import java.util.*;import java.util.regex.*;import java.text.*;//使用@Validation修饰Action类@Validation()public class RegistAction extends ActionSupport{private String name;private String pass;private int age;private Date birth;//使用Annotation指定必填、正则表达式两个校验规则 @RequiredStringValidator(type = ValidatorType.FIELD,key = "name.requried",message = "") @RegexFieldValidator(type = ValidatorType.FIELD, expression = "\\w{4,25}",key = "name.regex",message = "")public void setName(String name) {this.name = name; }public String getName(){return (this.name); }//使用Annotation指定必填、正则表达式两个校验规则 @RequiredStringValidator(type = ValidatorType.FIELD,key = "pass.requried",message = "") @RegexFieldValidator(type = ValidatorType.FIELD, expression = "\\w{4,25}",key = "pass.regex",message = "")public void setPass(String pass){this.pass = pass; }public String getPass() {return (this.pass); }//使用Annotation指定整数范围校验规则@IntRangeFieldValidator(message = "", key = "age.range", min = "1", max = "150")public void setAge(int age){this.age = age; }public int getAge() {return (this.age); }//使用Annotation指定日期范围校验规则@DateRangeFieldValidator(message = "", key = "birth.range", min = "1900/01/01", max = "2050/01/21")public void setBirth(Date birth) {this.birth = birth; }public Date getBirth(){return (this.birth); }}?上面代码使用了验证器 Annotation 修饰了各属性的 setter 方法。通过在? Action 中使用 Annotation 指定各字段应该满足的校验规则,就可以避免书写 XML 校验规则文件。
但是所有内容都被写入 java 代码中,会给后期维护带来一定困难
?
?
?
?
?
?