Java WorldJava学习笔记程序员

9、 Struts2验证(声明式验证、自定义验证器)

2016-12-04  本文已影响329人  MPPC

1. 什么是Struts2 验证器

2、声明式验证

 <!-- 针对 age 属性进行验证. 基于字段的验证 -->
<field name="age">
      <field-validator type="int">
          <param name="min">20</param>
          <param name="max">60</param>
          <message>年龄范围在${min}-${max}中!</message>
      </field-validator>
</field>




    * conversion validator:转换验证器
    * date validator:日期验证器
    * double validator:浮点验证器
    * email validator:email 验证器
    * expression validator:表达式验证器
    * fieldexpression validator:字段表达式验证器
    * int validator:整型验证器
    * regex validator:正则表达式验证器
    * required validator:非空验证器
    * requiredstring validator:非空字符串验证器
    * stringlength validator:字符串长度验证器
    * url validator:url 格式验证器
    * visitor validator:复合属性验证器



<field-validator type="int" short-circuit="true">
<validator type="email" short-circuit="true">
<!-- 针对 age 属性进行验证. 基于字段的验证 -->
<field name="age">

    <!-- 设置短路验证,当前验证未通过,不进行后面的验证 -->
    <field-validator type="conversion" short-circuit="true">
            <message>当前年龄无法读取!</message>
    </field-validator>

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

        <message key="error.int" />
    </field-validator>
</field>
Object action = invocation.getAction();
if (action instanceof ValidationAware) {
      ValidationAware va = (ValidationAware) action;
      if(va.hasErrors() || va.hasActionErrors()){
          return "input";
      }
}

<!-- 非字段验证 -->
<validator type="expression">
    <param name="expression"><![CDATA[password==repassword]]></param>
    <message>Password is not equals to repassword</message>
</validator>


<!-- 针对 age 属性进行验证. 基于字段的验证 -->
<field name="age">
    <!-- 设置短路验证,当前验证未通过,不进行后面的验证 -->
    <field-validator type="conversion" short-circuit="true">
        <message>当前年龄无法读取!</message>
    </field-validator>

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

        <message key="error.int" />
    </field-validator>
</field>
<field name="count">
    <field-validator type="int">
        <param name="min">1</param>
        <param name="max">10</param>
        <message key="error.int"></message>
    </field-validator>
</field>
# i18n
age=年龄
count=数量
#fieldName为检验时传递过来的filed,对应age=年龄 count=数量
error.int=${getText(fieldName)}范围在${min}-${max}中!

public class IDCardValidation extends FieldValidatorSupport {
                 
    @Override
    public void validate(Object object) throws ValidationException {
        //1、获取字段名称
        String fieldName = getFieldName();
        //2、获取值
        Object value = this.getFieldValue(fieldName, object);
        //3、验证
       IDCard idCard = new IDCard();
       boolean result =  idCard.Verify(value.toString());
   
       //4、验证失败加入错误消息
        if (!result) {
            addFieldError(fieldName, object);
        }
    }
}
<validators>
       <validator name="idCard"
       class="org.pan.validation.app.MyValidation.IDCardValidation">
       </validator>
</validators>
 <!-- 测试自定验证器 -->
<field name="idCard">
        <field-validator type="idCard">
                <message>This is Not IDCard</message>
        </field-validator>
</field>

上一篇 下一篇

猜你喜欢

热点阅读