zoukankan      html  css  js  c++  java
  • Struts2的输入验证

    一、概述:

    ① Struts2的输入验证
    基于 XWorkValidation Framework声明式验证Struts2提供了一些基于 XWork Validation Framework内建验证程序.使用这些验证程序不需要编程, 只要在一个 XML 文件里对验证程序应该如何工作作出声明就可以了.需要声明的内容包括:
      •哪些字段需要进行验证
      •使用什么验证规则
      •验证失败时应该把什么样的出错消息发送到浏览器端
    编程验证:通过编写代码来验证用户输入
    二、Struts2的声明式验证:

    ①  声明式验证程序可以分为两类:
    字段验证判断某个字段属性的输入是否有效
    非字段验证:  不只针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验。例如:对再次输入密码的判断。
    ②  使用个声明式验证程序需要3 个步骤:
          –1. 确定哪些Action字段需要验证
          –2. 编写一个验证程序配置文件.它的文件名必须是以下两种格式之一:
                •若一个 Action类的多个action使用同样的验证规则:ActionClassName-validation.xml
                •若一个 Action类的多个action使用不同的验证规则:ActionClass-alias-validation.xml,例如 UserAction-User_create-validation.xml
          –3. 确定验证失败时的响应页面:struts.xml 文件中定义一个 <result name=“input”>的元素.
    ③ Struts2的一些内建验证规则:

          •conversion validator:转换验证器
          •date validator:日期验证器
          •double validator:浮点验证器
          •email validatoremail验证器
          •expression validator:表达式验证器
          •fieldexpressionvalidator:字段表达式验证器
          •intvalidator:整型验证器
          •regexvalidator:正则表达式验证器
          •required validator:非空验证器
          •requiredstringvalidator:非空字符串验证器
          •stringlengthvalidator:字符串长度验证器
          •urlvalidatorurl格式验证器
         •visitor validator:复合属性验证器
    ④  一个简单的字段验证声明:

    <!-- 待验证字段名称为username -->
        <field name="username">
            <!-- 使用非空验证器 -->
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <!-- 错误提示消息 -->
                <message>必须输入用户名</message>
            </field-validator>
            <!-- 使用正则验证器 -->
            <field-validator type="regex">
                <param name="expression"><![CDATA[(w{6,20})]]></param>
                <message>用户名长度必须在6到20字符之间</message>
            </field-validator>
        </field>
    ⑤ 显示错误消息

      a、若使用的是struts2的非simple主题,则自动显示错误消息

      b、若使用的是simple主题,则需要 s:fielderror 标签或直接使用 EL 表达式(使用 OGNL)

        ${fieldErrors.age[0] }
         或者
        <s:fielderror fieldName="age"></s:fielderror>   推荐使用此方法

    ⑥  Struts2声明式验证的原理:

         > Struts2 默认的拦截器栈中提供了一个 validation 拦截器
         > 每个具体的验证规则都会对应具体的一个验证器. 有一个配置文件把验证规则名称和验证器关联起来了. 而实际上验证的是那个验证器.
            该文件位于 com.opensymphony.xwork2.validator.validators 下的 default.xml
            <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>

    ⑦  短路验证

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

        <validator …/>元素和 <field-validator …/>元素可以指定一个可选的 short-circuit属性,该属性指定该验证器是否是短验证器,默认值为false

    <!-- 设置短路验证: 若当前验证没有通过, 则不再进行下面的验证 -->
    		<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>
    ⑧  不同的字段使用同样的验证规则, 而且使用同样的响应消息 ?
    将错误消息配置在国际化资源文件中:
    error.int=${getText(fieldName)} needs to be between ${min} and ${max}
    age=年龄
    count=数量
    ⑨  自定义验证器:

    I.   定义一个验证器的类
        > 自定义的验证器都需要实现 Validator.
        > 可以选择继承 ValidatorSupport 或 FieldValidatorSupport 类
        > 若希望实现一个一般的验证器, 则可以继承 ValidatorSupport
        > 若希望实现一个字段验证器, 则可以继承 FieldValidatorSupport
        > 若验证程序需要接受一个输入参数, 需要为这个参数增加一个相应的属性,并提供对应的setter与getter方法

    public class IDCardValidator extends FieldValidatorSupport {
    
    	@Override
    	public void validate(Object object) throws ValidationException {
    		//1. 获取字段的名字和值
    		String fieldName = getFieldName();
            Object value = this.getFieldValue(fieldName, object);
            
    		//2. 验证
    		IDCard idCard = new IDCard();
    		boolean result = idCard.Verify((String)value);
            
    		//3. 若验证失败, 则 ...
    		if(!result){
    			addFieldError(fieldName, object);
    		}
    		
    	}
    
    }

    II.  在配置文件中配置验证器

        > 默认情况下下, Struts2 会在 类路径的根目录下加载 validators.xml 文件. 在该文件中加载验证器.
             该文件的定义方式同默认的验证器的那个配置文件: 位于 com.opensymphony.xwork2.validator.validators 下的 default.xml
             
        > 若类路径下没有指定的验证器, 则从 com.opensymphony.xwork2.validator.validators 下的 default.xml 中的验证器加载     

    III. 使用: 和目前的验证器一样.
    三、Struts2的编程式验证

    Struts2提供了一个Validateable接口,可以使Action实现这个接口以提供编程验证功能.
    ActionSupport 已经实现了Validateable接口

  • 相关阅读:
    Linux下安装mysql(yum和源码编译两种方式)
    搭建Hadoop集群(centos6.7+hadoop-2.7.3)
    xen虚拟机(Centos6.6)的创建和扩容
    Apache Ranger对HDFS的访问权限控制的原理分析(一)
    Block Token 原理分析
    Hadoop安全机制之令牌
    VS 2012 Unit Test
    java 并发
    图片相关
    cmd出现乱码
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293736.html
Copyright © 2011-2022 走看看