Struts2笔记系列验证框架
Struts2
Struts验证框架
Strut2验证框架的使用非常简单,只需要在需要验证的Action类同包下,添加一个XML文件,命名规则为Action全类名-validation.xml,其内容是为这个用户输入的信息在Action的execute运行之间进行验证。
Action全类名-validation.xml的内容格式为:
<validators>
<field name="user">
<field-validator type="requiredstring">
<message>please enter your account:</message>
</field-validator>
</field>
...
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<message> age minist is the 18 </message>
</field-validator>
</field>
</validators>
验证的时机是发生在execute方法运行之前,在Struts2的params***已经把请求的参数反射到设置的Action属性之后,所以验证框架实际上验证的是值栈内的值,验证的结果,如果用户输入的参数完全满足验证条件,则会继续执行execute方法,如果用户输入的参数不满足验证条件,则跳转到这个Action所配置的名为input的Result。一般情况下,input结果都是在验证不成功的情况下,返回到原来提交的页面。
验证框架的运行原理
当在配置文件中,我们没有配置额外的***的时候,默认使用父包struts-default.xml中的默认***栈,而默认***栈中有一些***用来实现验证,相关的***有params,conversionError,validation***。
params***用于将请求中的参数反射的设置到Action属性中,
conversionError***用于在params***出错的情况下,把出错的信息放在值栈中,
validation***验证Action属性是否符合条件。
因此validation***验证的是值栈中的相应的内容,因为值栈中的这些内容来源于请求的参数部分。在验证文件中,可以使用${xxx.xxx}可以使用OGNL引用值栈的内容,
类型转换出错:params***可以将纯数字的字符转换为整数,但是对于数字和字符混合的字符串想要转换为整型,会报错,这个时候Action对象的属性就会保持其初始值,即Int类型的初始值为0.
内建验证器
Struts2的验证框架为用户建立了足够多的内建验证器,用来满足不同的验证请求,内建验证器的声明文件放置在xwork-core-xxx.jar文件中,位置为/com/opensymphony/xwork2/validator/validators/default.xml.
eg :日期验证器(date)
用来验证一个日期型参数是否在指定的范围内,如果不在范围内,则报错,date验证器的参数有两个参数:
min:用来指定可接受范围的最小值,
max:用来指定可接受范围的最大值。
等等等。。。
自定义验证器
⑴继承FieldValidatorSupport类,它提供很多方法来请用户调用。
getFieldName方法 用来获取被验证的字段名;
getFieldValue方法用来获取用户输入的参数;
⑵声明自定义验证器
在src文件夹下,按照default.xml的声明方式,写一个validators.xml文件。
...
<validators>
<validator name="test" class="xxx"/>
</validators>
⑶引用自定义验证器
在类同包下的验证文件中引用自定义的验证器。
<validators>
<field name="xx">
<field-validator type="test">
<param name="xxx" >none</param>
<message>xxxxxxx</message>
</field-validator>
</field>
</validators>
查看验证器返回的错误信息:
两种方式:⑴对于字段验证错误,在<s:form>使用xhtml风格是,<s:textfield/>标签可以将这个字段的错误信息显示在文本框中,⑵用<s:fielderror/>标签将字段验证错误的错误信息显示在指定位置。
参考《研磨Struts2》 建议亲自阅读此书,加深理解。