读书人

struts2 输入校验 (3)

发布时间: 2012-10-31 14:37:31 作者: rapoo

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 代码中,会给后期维护带来一定困难

?

?

?

?

?

?

读书人网 >其他相关

热点推荐