尚硅谷学习笔记----声明式验证

由于前端的验证可能会被绕过或无效,所以在服务器端必须对提交的数据进行验证,Struts2提供了非常便利的验证器。通过声明配置就可以达到服务器端的验证。

原理

Struts2 默认的拦截器栈中提供了一个 validation 拦截器,这个拦截器将配置的验证规则和系统具体的一个验证器对应, 而实际上验证的是那个验证器. 该文件位于 com.opensymphony.xwork2.validator.validators 下的 default.xml中配置的位置如:
validator name=”required” class=”com.opensymphony.xwork2.validator.validators.RequiredFieldValidator”/>

简单的验证器配置步骤(helloworld)

I. 先明确对哪一个 Action (model)的哪一个字段进行验证: age
II. 编写配置文件:
1、把 struts-2.3.15.3\apps\struts2-blank\WEB-INF\classes\example 下的 Login-validation.xml 文件复制到当前 Action 所在的包下.
2、更改文件名, 把 Login 改为当前 Action 的名字.
3、编写验证规则: 参见 struts-2.3.15.3/docs/WW/docs/validation.html 文档即可.

    <field name="age">
         <field-validator type="int">
             <param name="min">20</param>
             <param name="max">50</param>
             <message>Age needs to be between ${min} and ${max}</message>
         </field-validator>
     </field>

4、该错误消息可以国际化吗?答案是可以!
在国际化资源文件 中加入一个键值对: error.int=^^^Age needs to be between ${min} and ${max}配置验证提示消息如下:

    <message key="error.int"></message>. 

5、若验证失败, 则转向 input 的那个 result. 所以需要配置 name=input 的 result
6、如何显示错误消息呢 ?
若使用的是非 simple, 则自动显示错误消息.
若使用的是 simple 主题, 则需要 s:fielderror 标签或直接使用 EL 表达式(使用 OGNL) <s:fielderror fieldName="age"></s:fielderror>${fieldErrors.age[0] }

短路验证

若对一个字段使用多个验证器, 默认情况下会执行所有的验证. 若希望前面的验证器验证没有通过, 后面的就不再验证, 可以使用短路验证

<!-- 设置短路验证: 若当前验证没有通过, 则不再进行下面的验证 -->
        <field-validator type="conversion" short-circuit="true">
            <message>^Conversion Error Occurred</message>
        </field-validator>

        <field-validator type="int">
            <param name="min">20</param>
            <param name="max">60</param>
            <message key="error.int"></message>
        </field-validator>  

非字段验证

关于非字段验证: 不是针对于某一个字段的验证.

<validator type="expression">
   <param name="expression"><![CDATA[password==password2]]></param>
   <message>Password is not equals to password2</message>
</validator>    

显示非字段验证的错误消息, 使用 s:actionerror 标签: <s:actionerror/>

不同的字段使用同样的验证规则, 而且使用同样的响应消息 ?

要利用国际化配置文件,配置中

error.int=${getText(fieldName)} needs to be between ${min} and ${max}
//age和count是fieldname。
age=姓名
count=数量    

详细分析参见 PPT 159.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值