Struts 2提供了大量的内建校验器,这些内建的校验器可以满足大部分应用的校验需求,开发者只需要使用这些校验器即可。如果应用有一个特别复杂的校验需求,而且该校验有很好的复用性,开发者可以开发自己的校验器。
使用WinRAR打开Struts 2发布包的解压缩文件中的xwork-2.2.1.jar文件,在该压缩文件的com\opensymphony\xwork2\validator\validators路径下找到一个default.xml文件,这个文件就是Struts 2默认的校验器注册文件。该文件的代码如下:
- <validators>
- <!-- 必填校验器 -->
- <validator name="required" class="com.opensymphony.xwork
- .validator.validators.RequiredFieldValidator"/>
- <!-- 必填字符串校验器 -->
- <validator name="requiredstring" class="com.opensymphony.xwork
- .validator.validators. RequiredStringValidator"/>
- <!-- 整数校验器 -->
- <validator name="int" class="com.opensymphony.xwork
- .validator.validators.IntRangeFieldValidator"/>
- <!-- 长整数校验器 -->
- <validator name="long" class="com.opensymphony.xwork2
- .validator.validators.LongRangeFieldValidator"/>
- <!-- 短整数校验器 -->
- <validator name="short" class="com.opensymphony.xwork2
- .validator.validators.ShortRangeFieldValidator"/>
- <!-- 双精度浮点数校验器 -->
- <validator name="double" class="com.opensymphony.xwork
- .validator.validators.DoubleRangeFieldValidator"/>
- <!-- 日期校验器 -->
- <validator name="date" class="com.opensymphony.xwork
- .validator.validators. DateRangeFieldValidator"/>
- <!-- 表达式校验器 -->
- <validator name="expression" class="com.opensymphony.xwork
- .validator.validators. ExpressionValidator"/>
- <!-- 字段表达式校验器 -->
- <validator name="fieldexpression" class="com.opensymphony.xwork
- .validator.validators. FieldExpressionValidator"/>
- <!-- 电子邮件校验器 -->
- <validator name="email" class="com.opensymphony.xwork
- .validator.validators. EmailValidator"/>
- <!-- 网址校验器 -->
- <validator name="url" class="com.opensymphony.xwork
- .validator.validators.URLValidator"/>
- <!-- Visitor校验器 -->
- <validator name="visitor" class="com.opensymphony.xwork
- .validator.validators.VisitorFieldValidator"/>
- <!-- 转换校验器 -->
- <validator name="conversion" class="com.opensymphony.xwork
- .validator.validators. ConversionErrorFieldValidator"/>
- <!-- 字符串长度校验器 -->
- <validator name="stringlength" class="com.opensymphony.xwork
- .validator.validators.StringLengthFieldValidator"/>
- <!-- 正则表达式校验器 -->
- <validator name="regex" class="com.opensymphony.xwork
- .validator.validators. RegexFieldValidator"/>
- </validators>
上面的粗体字代码标出的校验器名称,就是Struts 2所支持的全部校验器。
通过上面的代码可以看出,注册一个校验器是如此简单:通过一个<validator .../>元素即可注册一个校验器,每个<validator .../>元素的name属性指定该校验器的名字,class属性指定该校验器的实现类。
如果开发者开发了一个自己的校验器,则可以通过添加一个validators.xml文件(该文件应该放在WEB-INF/classes路径下)来注册校验器。validators.xml文件的内容也是由多个<validator .../>元素组成的,每个<validator .../>元素注册一个校验器。
注意:
如果Struts 2系统在WEB-INF/classes路径下找到一个validators.xml文件,则不会再加载系统默认的default.xml文件。因此,如果开发者提供了自己的校验器注册文件(validators.xml文件),一定要把default.xml文件里的全部内容复制到validators.xml文件中。
1.必填校验器
必填校验器的名字是required,该校验器要求指定的字段必须有值(非空),该校验器可以接受如下参数。
Ø fieldName:该参数指定校验的Action属性名,如果采用字段校验器风格,则无须指定该参数。
采用非字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用非字段校验器风格来配置必填校验器 -->
- <validator type="required">
- <!-- 指定需要校验的字段名 -->
- <param name="fieldName">username</param>
- <!-- 指定校验失败的提示信息 -->
- <message>username must not be null</message>
- </validator>
- ..
- <validators>
采用字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用字段校验器风格来配置必填校验器,校验username属性 -->
- <field name="username">
- <field-validator type="required">
- <!-- 指定校验失败的提示信息 -->
- <message>username must not be null</message>
- </ field-validator>
- ...
- </field>
- ..
- <validators>
2.必填字符串校验器
必填字符串校验器的名字是requiredstring,该校验器要求字段值必须非空且长度大于0,即该字符串不能是""。该校验器可以接受如下参数。
Ø fieldName:该参数指定校验的Action属性名,如果采用字段校验器风格,则无须指定该参数。
Ø trim:是否在校验前截断被校验属性值前后的空白,该属性是可选的,默认是true。
采用非字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用非字段校验器风格来配置必填字符串校验器 -->
- <validator type="requiredstring">
- <!-- 指定需要校验的字段名 -->
- <param name="fieldName">username</param>
- <!-- 指定截断被校验属性值前后的空白 -->
- <param name="trim">true</param>
- <!-- 指定校验失败的提示信息 -->
- <message>username is required</message>
- </validator>
- ..
- <validators>
采用字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用字段校验器风格来配置必填字符串校验器,校验username属性 -->
- <field name="username">
- <field-validator type="requiredstring">
- <!-- 指定截断被校验属性值前后的空白 -->
- <param name="trim">true</param>
- <!-- 指定校验失败的提示信息 -->
- <message>username is required</message>
- </ field-validator>
- ...
- </field>
- ..
- <validators>
3.整数校验器
整数校验器包括int、long、short,该校验器要求字段的整数值必须在指定范围内。该校验器可以接受如下参数。
Ø fieldName:该参数指定校验的Action属性名,如果采用字段校验器风格,则无须指定该参数。
Ø min:指定该属性的最小值,该参数可选,如果没有指定,则不检查最小值。
Ø max:指定该属性的最大值,该参数可选,如果没有指定,则不检查最大值。
采用非字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用非字段校验器风格来配置整数校验器 -->
- <validator type="int">
- <!-- 指定需要校验的字段名 -->
- <param name="fieldName">age</param>
- <!-- 指定age属性的最小值 -->
- <param name="min">20</param>
- <!-- 指定age属性的最大值 -->
- <param name="max">50</param>
- <!-- 指定校验失败的提示信息 -->
- <message>Age needs to be between ${min} and ${max}</message>
- </validator>
- ..
- <validators>
采用字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用字段校验器风格来配置整数校验器,校验age属性 -->
- <field name="age">
- <field-validator type="int">
- <!-- 指定age属性的最小值 -->
- <param name="min">20</param>
- <!-- 指定age属性的最大值 -->
- <param name="max">50</param>
- <!-- 指定校验失败的提示信息 -->
- <message>Age needs to be between ${min} and ${max}</message>
- </ field-validator>
- ...
- </field>
- ..
- <validators>
与整数校验器用法几乎相同的是双精度浮点数校验器,唯一的区别是它要求被校验的Action属性是双精度浮点数。
4.日期校验器
日期校验器的名字是date,该校验器要求字段的日期值必须在指定范围内。该校验器可以接受如下参数。
Ø fieldName:该参数指定校验的Action属性名,如果采用字段校验器风格,则无须指定该参数。
Ø min:指定该属性的最小值,该参数可选,如果没有指定,则不检查最小值。
Ø max:指定该属性的最大值,该参数可选,如果没有指定,则不检查最大值。
注意:
如果系统没有指定日期转换器,则默认使用XWorkBasicConverter完成日期转换。进行日期转换时,默认使用struts.properties里指定的Locale,或者系统默认的Locale的Date.SHORT格式来进行日期转换。
采用非字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用非字段校验器风格来配置日期校验器 -->
- <validator type="date">
- <!-- 指定需要校验的字段名 -->
- <param name="fieldName">birth</param>
- <!-- 指定birth属性的最小值 -->
- <param name="min">1990-01-01</param>
- <!-- 指定birth属性的最大值 -->
- <param name="max">2010-01-01</param>
- <!-- 指定校验失败的提示信息 -->
- <message> Birthday must be within ${min} and ${max} </message>
- </validator>
- ...
- <validators>
采用字段校验器配置风格时,该校验器的配置示例如下:
- <validators>
- <!-- 使用字段校验器风格来配置日期校验器,校验birth属性 -->
- <field name="birth">
- <field-validator type="date">
- <!-- 指定birth属性的最小值 -->
- <param name="min">1990-01-01</param>
- <!-- 指定birth属性的最大值 -->
- <param name="max">2010-01-01</param>
- <!-- 指定校验失败的提示信息 -->
- <message> Birthday must be within ${min} and ${max} </message>
- </ field-validator>
- ...
- </field>
- ...
- <validators>
本文转自 fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/883419 ,如需转载请自行联系原作者