• Struts2输入校验


    1、编写校验规则文件
    <ActionName>-validation.xml),文件放在Action类文件相同的路径下校验失败返回input的result。
     

     
      <validators>
        <!-- 校验Action的name属性 -->
        <field name="name">
            <!-- 指定name属性必须满足必填规则 -->
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message key="name.requried"/>     <!--国际化信息(国际化资源文件中有name.requried=必须输入用户名)-->
            </field-validator>
            <!-- 指定name属性必须匹配正则表达式 -->
            <field-validator type="regex">
                <param name="regex"><![CDATA[(w{4,25})]]></param>
                <message key="name.regex"/>
            </field-validator>
        </field>
      <!-- 指定age属性必须在指定范围内-->
        <field name="age">
            <field-validator type="int">
                <param name="min">1</param>
                <param name="max">150</param>
                <message key="age.range"/>
            </field-validator>
        </field>
        <!-- 指定birth属性必须在指定范围内-->
        <field name="birth">
            <field-validator type="date">
                <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
                <param name="min">1900-01-01</param>
                <param name="max">2050-02-21</param>
                <message key="birth.range"/>
            </field-validator>
        </field>
    </validators>            

    2、使用客户端校验
        1)将输入页面表单元素改为使用Struts2标签来生成表单
        2)为该<s:form../>元素增加validate=“true”属性。
            <s:fielderror/>
                    <s:form action="regist" validate="true">
                    <s:textfield name="name" label="用户名"/>
                    <s:textfield name="pass" label="密码"/>
                    <s:textfield name="age" label="年龄"/>
                    <s:textfield name="birth" label="生日"/>
                    <s:submit value="注册"/>
            </s:form>
     
         客户端校验仍然是基于JavaScript的,因为JS本身的限制,有些服务器端校验不能转换成客户端校验。
            客户端校验仅支持下面几种:    
                    required validator必填校验器
                    requiredstring validator必填字符串校验器
                    stringlength validator字符串长度校验器
                    regex validator表达式校验器
                    email validator邮件校验器
                    url validator网址校验器
                    int validator整数校验器
                    double validator双精度
        
              客户端校验需要注意
                        不要将<s:form../>元素的theme属性指定为simple
                        浏览器直接访问启用客户端校验的表单页会引发异常,可把这些表单放WEB-INF下,通过核心Filter后再访问
                        如果客户端校验需要输出国际化提示信息,则需要使用全局国际化资源文件,不能使用Action范围的文件
                        启用客户端校验的表单页面的action和namespace要分开写(<s:form action="regist"                                                                                                                             namespace="/wj"> not <s:form action="wj/regist">)
     
    3、校验器配置风格
            字段校验器风格
                  参考1里面的校验文件      
            非字段校验器风格
                <!-- 配置指定必填字符串的校验器 -->
              <validator type="requiredstring">
                <!-- 使用该校验器校验name属性 -->
                <param name="fieldName">name</param>
                <param name="trim">true</param>
                <!-- 指定校验失败后输出name.required对应的国际化信息 -->
                <message key="name.requried"/>
            </validator>
            <!-- 配置指定正则表达式的校验器 -->
            <validator type="regex">
                <!-- 使用该校验器校验name属性 -->
                <param name="fieldName">name</param>
                <param name="trim">true</param>
                <param name="regex"><![CDATA[(w{4,25})]]></param>
                <!-- 指定校验失败后输出name.required对应的国际化信息 -->
                <message key="name.regex"/>
            </validator>
     
    4、短路校验器
                <field-validator type="requiredstring" short-circuit="true">
            
    5、校验文件搜索规则
                遇到下列情况时:
              <action name="*Pro" class="org.crazyit.app.action.RegistAction"
                method="{1}">
                解决方案:
                为校验规则文件添加Action别名来指定需要校验的处理逻辑:
                <ActionClassName>-<ActionAliasName>-validation.xml
                   
                 假设系统有两个Action:BaseAction和RegistAction,RegistAction继承了BaseAction,系统搜索文件顺序如下:
                    1)BaseAction-validation.xml
                    2)BaseAction-别名-validation.xml
                    3)RegistAction-Validation.xml
                    4)RegistAction-别名-validation.xml
                    搜索到第一个校验文件后,还会继续搜索。
                    搜索从上到下,实际规则是所有规则总和,有冲突时,以后面规则为准。
     
    6、校验顺序和短路
                校验器执行顺序有如下原则:
                        先非字段风格校验器,再字段;排在前面的先执行。
                校验器短路原则:
                        所有非字段校验器优先,某个非字段校验器失败,对应字段的字段校验器不再校验,其他非字段校验器仍要执行,字段校验器失败后的其他字段校验器不会执行。
                
    7、内建校验器
                   Struts2包下xwork-2.3.16.3.jar中comopensymphonyxwork2validatorvalidators 下的default.xml文件。
      

     
                      
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
            "-//Apache Struts//XWork Validator Definition 1.0//EN"
     
    <!-- START SNIPPET: validators-default -->
    <validators>
        <validator name="requiredclass="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
        <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
        <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
        <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
        <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
        <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
        <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
        <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
        <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
        <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
        <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
        <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
        <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
        <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
        <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
        <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    </validators>
    <!--  END SNIPPET: validators-default -->

    8、基于注解的输入校验
            可以简化开发,但是会给维护带来一定的困难
        
        // 使用注解指定必填、正则表达式两个校验规则
        @RequiredStringValidator(key = "name.requried"
            , message = "")
        @RegexFieldValidator(regex = "\w{4,25}"
            ,key = "name.regex" , message = "")
        public void setName(String name)
        {
            this.name = name;
        }
        // age的setter和getter方法
        @IntRangeFieldValidator(message = ""
            , key = "age.range", min = "1"
            , max = "150")
        public void setAge(int age)
        {
            this.age = age;
        }
     
        // birth的setter和getter方法
        @DateRangeFieldValidator(message = ""
            , key = "birth.range", min = "1900/01/01"
            , max = "2050/01/21")
        public void setBirth(Date birth)
        {
            this.birth = birth;
        }
     
     
    9、手动完成输入校验
            1)重写validate()方法
            2)重写validateXxx方法
     
    10、Struts2输入校验步骤
            1)类型转换器对字符串的请求参数执行类型转换,并将这些值设置为Action属性值。
            2)类型转换过程中如果出现异常,将异常信息保存到ActionContext中,conventionError拦截器负责将其封装到FieldError里。
            3)使用Struts2中配置的校验器进行输入校验
            4)通过反射调用validateXxx()方法。
            5)调用validate()方法。
            6)若没有出现FieldError时调用Action里的处理方法,出现了则转入input逻辑视图所指定的视图资源。
     
     
  • 相关阅读:
    面向对象---工厂模式
    [转]Caffe 安装配置(CentOS + 无GPU)
    [转]Centos6.5+CUDA6.5+caffe安装配置及可能遇到问题解答
    [转]Caffe安装过程记录(CentOS,无独立显卡,无GPU)
    [转]LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
    [转]centos 6.5安装caffe
    [转]CentOS编译安装GIMP
    [转]Snappy压缩库安装和使用之一
    [转]拍照怎么搜题?(下)
    [转]拍照怎么搜题?(上)
  • 原文地址:https://www.cnblogs.com/goingforward/p/5735947.html
Copyright © 2020-2023  润新知