- Struts 2.x权威指南
- 李刚编著
- 402字
- 2025-03-11 03:21:11
5.3.2 非字段校验器配置风格
对于非字段校验器配置风格而言,是一种以校验器优先的配置方式。在这种配置方式下,校验规则文件的根元素下包含了多个<validator .../>元素,每个<validator .../>元素定义了一个校验规则。
对于采用非字段校验器配置风格的校验规则文件,<validators .../>元素下有多个<validator .../>元素,每个<validators .../>元素都有如下格式。
<validator type="校验器名">
<param name="fieldName">需要被校验的字段</param>
<!-- 此处需要为不同校验器指定数量的校验参数 -->
<param name="参数名">参数值</param>
...
<!-- 校验失败后的提示信息,其中key指定国际化信息的key -->
<message key="I18Nkey">校验失败后的提示信息</message>
</validator >
每个<validator .../>元素定义一个校验规则,该元素指定一个type属性,该type属性指定了该校验器的名字。
因为使用非字段校验器配置风格时,采用的是校验器优先的方式,故必须为<validator .../>配置一个fieldName参数,该参数的值就是被校验的Action属性名。除此之外,还需要指定数量不等的<param .../>元素,用于指定校验器所需的参数。
下面采用非字段校验器风格改写前面的校验规则文件。
程序清单:codes\05\5.3\non-field\WEB-INF\src\org\crazyit\struts2\action\RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定Struts 2的数据校验规则文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- Struts 2校验文件的根元素 --> <validators> <!-- 配置必填字符串的校验器 --> <validator type="requiredstring"> <!-- 使用该校验器校验name属性 --> <param name="fieldName">name</param> <param name="trim">true</param> <!-- 指定校验失败后输出name.required对应的国际化信息 --> <message>${getText("name.requried")}</message> </validator> <!-- 配置正则表达式的校验器 --> <validator type="regex"> <!-- 使用该校验器校验name属性 --> <param name="fieldName">name</param> <param name="trim">true</param> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 指定校验失败后输出name.regex对应的国际化信息 --> <message>${getText("name.regex")}</message> </validator> <!-- 配置必填字符串的校验器 --> <validator type="requiredstring"> <!-- 使用该校验器校验pass属性 --> <param name="fieldName">pass</param> <param name="trim">true</param> <!-- 指定校验失败后输出pass.required对应的国际化信息 --> <message>${getText("pass.requried")}</message> </validator> <!-- 配置正则表达式的校验器 --> <validator type="regex"> <!-- 使用该校验器校验pass属性 --> <param name="fieldName">pass</param> <param name="trim">true</param> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 指定校验失败后输出pass.regex对应的国际化信息 --> <message>${getText("pass.regex")}</message> </validator> <!-- 配置整数校验器 --> <validator type="int"> <!-- 使用该校验器校验age属性 --> <param name="fieldName">age</param> <!-- 指定整数校验器的范围--> <param name="min">1</param> <param name="max">150</param> <!-- 指定校验失败后输出age.range对应的国际化信息 --> <message>${getText("age.range")}</message> </validator> <!-- 配置日期校验器 --> <validator type="date"> <!-- 使用该校验器校验birth属性 --> <param name="fieldName">birth</param> <!-- 指定日期校验器的范围--> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <!-- 指定校验失败后输出birth.range对应的国际化信息 --> <message>${getText("birth.range")}</message> </validator> </validators>
相比之下,在一个<field .../>元素内定义字段校验器,比使用带有一个 fieldName 参数的<validator .../>元素好得多,而且XML代码本身也清晰得多(字段分组更清晰了)。因此,笔者更倾向于使用字段校验器风格。