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》 建议亲自阅读此书,加深理解。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值