struts 验证

使用验证框架
1、定义一个xml文件,位置和需要执行校验的类位置一致,名称定义规则为
    类名称-validation.xml   类似于validate方法
    类名称-请求地址-validation.xml  类似于validateAdd方法
    
    例如目前需要针对UserAction进行服务器端数据校验,则xml文件和UserAction类文件的位置相同
    这里是针对 add方法的校验,则xml文件名称为UserAction-user_add-validation.xml
    
2、给xml文件引入dtd说明,可以参照struts2-core.jar中/xwork-validator-1.0.3.dtd

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
              "-//Apache Struts//XWork Validator 1.0.3//EN"
              "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

3、在UserAction-user_add-validation.xml中定义校验规则--需要针对哪个属性执行什么校验
    定义方法有2种:字段优先和非字段优先
        这两种写法没有什么本质区别,但是从可读性的角度上说,建议优先考虑使用字段优先
        
    校验子定义在struts2-core.jar的中/com/opensymphony/xwork2/validator/validators/default.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
              "-//Apache Struts//XWork Validator 1.0.3//EN"
              "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
    <validators>
        <field name="username">采用字段优先的定义方法,所以首先说明针对哪个属性进行校验
            <field-validator type="requiredstring">  说明需要进行什么校验,具体的校验子的名称定义在default.xml中
                <message>用户名称不能为空!</message>  默认的报错信息 
            </field-validator>
        </field>
    </validators>     

4、在<action>的配置中必须定义<result name="input">,用于说明所使用的校验报错页


必填验证required
    验证null,要求必须填写,用于针对对象类型属性,如果使用简单类型则失效,因为默认值
        <field name="age">
            <field-validator type="required">
                <message>年龄必须填写!</message>
            </field-validator>
        </field>
        
必须字串验证requiredstring
    验证null和空串,默认自动使用trim()方法
        <field name="username">
            <field-validator type="requiredstring">
                <message>用户名称不能为空!</message>
            </field-validator>
        </field>
        
整型数据范围验证int/short/long
    属性非空时执行范围验证,其中参数min用于定义最小值,max用于定义最大值,可以只定义一个方向,允许等于
            <field name="age">
                <field-validator type="int">
                    <param name="min">18</param>
                    <param name="max">65</param>
                    <message>年龄应该在${min}到${max}之间!</message>
                </field-validator>
            </field>
            
浮点数范围验证double
    参数  minInclusive maxInclusive  允许等于
         minExclusive  maxExclusive      不允许等于
        可以自行搭配使用
            <field name="salary">
                <field-validator type="double">
                    <param name="minInclusive">1000</param>
                    <param name="maxExclusive">10000</param>
                    <message>工资额度只能在1000到10000之间!</message>
                </field-validator>
            </field>                 

日期范围验证date
    参数min和max
        <field name="hiredate">
            <field-validator type="date">
                <param name="min">1989-2-3</param>
                <param name="max">2018-4-5</param>
                <message>入职日期应该在1989-2-3到${max}之间!</message>
            </field-validator>
        </field>    

字段表达式验证fieldexpression
    参数expression用于定义一个和字段相关的OGNL表达式
        <field name="password">
            <field-validator type="fieldexpression">
                <param name="expression">
                    <![CDATA[password==repassword]]>
                </param>
                <message>两次输入口令必须一致!</message>
            </field-validator>
        </field>

数据类型转换验证conversion
    数据类型转换失败的默认报错信息为:Invalid field value for field "字段名称"
        <field name="age">
            <field-validator type="conversion">
                <message>数据格式错误!</message>
            </field-validator>
        </field>
    
    去除默认的报错信息
        1、配置常量,说明全局资源文件名称
                struts.custom.i18n.resources=testmessages,testmessages2
                
            sturts.xml       <constant name="struts.custom.i18n.resources" value="msgs"/>
            
        2、定义对应的全局的资源文件   src/msgs.properties
            对应的key值可以在struts2-core.jar中查找    /com/opensymphony/xwork2/xwork-messages.properties
        
        3、在properties文件中定义
            xwork.default.invalid.fieldvalue=
            注意等号后面没有任何内容,目的在于不显示任何报错信息,具体的格式错误报错使用conversion实现
                
    新的问题:
        <field name="age">
            <field-validator type="conversion">
                <message>数据格式错误!</message>
            </field-validator>
            <field-validator type="required">
                <message>年龄必须填写!</message>
            </field-validator>
        两个报错信息都显示,不符合一般的使用习惯,针对这个问题,验证框架提供了短路校验的支持,也就是说上面的校
    验没有通过则后续校验不执行
        
        如何实现短路校验?short-circuit
            <field name="age">
                <field-validator type="conversion" short-circuit="true">
                    <message>数据格式错误!</message>
                </field-validator>
                <field-validator type="required">
                    <message>年龄必须填写!</message>
                </field-validator>

字串长度校验stringlength
    参数minLength和maxLength,不区分中英文
        <field name="username">
            <field-validator type="stringlength">
                <param name="minLength">6</param>
                <param name="maxLength">20</param>
                <message>名称应该在6到20个字符之间!</message>
            </field-validator>
        </field>
        
正则式验证regex
        <field name="username">
            <field-validator type="regex">
                <param name="regex">
                    <![CDATA[^[a-zA-Z0-9]{6,20}$]]>
                </param>
                <message>用户名称不合法!</message>
            </field-validator>
        </field>


       
验证框架同时支持客户端验证
    <s:form action="user_add.action" validate="true">
    在具体开发中不建议使用,因为能够支持的客户端验证比较有限,一般建议使用jquery.validate.js

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值