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

 

 

全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务