struts2验证技巧提高篇

三、struts2验证提高篇


    
3)注意:若一个Action类可以应答多个action请求,多个action请求使用不同的验证规则,怎么办?

为每一个不同的action请求定义其对应的验证文件:ActionClassName-AliasName-validation.xml

不带别名的配置文件:ActionClassName-validation.xml中的验证规则依然会发生作用,可以把一些公用的验证规则配置在其中,需要注意的是,只适用于某一个action的请求的验证规则就不要在这里配置了。
别名:就是struts配置文件中action的name对应的名称。

4)声明式验证框架原理
Struts2默认的拦截器栈中提供了一个validation拦截器

每个具体的验证规则都会对应具体的一个验证器,有一个配置文件把验证规则名称和验证器关联起来了。而实际上验证的是那个验证器。
位于com.opensymphony.xwork2.validator.validators下的default.xml
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    
    
5)短路验证:若对一个字段使用多个验证器,默认情况下会执行所有的验证,若希望前面的验证没有通过,后面的不再验证,可以使用短路验证。
<field name="age">
     <!-- 设置短路验证:若当前验证没有通过,则不再进行下一个验证 -->
     <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">50</param>
             <message>Age needs to be between ${min} and ${max}</message>
         </field-validator>
     </field>
     
 6)若类型转换失败,默认情况下还会执行后面的拦截器,还会进行验证。可以通过修改ConversionErrorInterceptor源代码的方式使当类型转换失败是,不在执行后续的验证拦截器,而直接返回input的result
 
    Object action = invocation.getAction();
        if (action instanceof ValidationAware) {
            ValidationAware va = (ValidationAware) action;
            
            if(va.hasFieldErrors()||va.hasActionErrors()){
             //如果有错就不往后面走了
             return "input";
            }
        }
        
  7)关于非字段验证:不是针对某一个字段的验证
       
     <!-- 测试非字段验证 -->
    
      <validator type="expression">
         <param name="expression"> <![CDATA[password==password2]]></param>
         <message>Password is not equals to Password2</message>
      </validator>
      
      显示非字段验证的错误消息,使用s:actionerror标签:
       <s:actionerror/>
       
       
       课时3
       错误消息的重用性
   8)不同的字段使用同样的验证规则,而且使用同样的响应消息?
   
   error.int=****${fieldName} needs to be between ${min} and ${max}
age=\u5E74\u9F84
count=\u6570\u91CF


课时4 自定义验证器


9)自定义验证器:
①定义一个验证器的类
》自定义的验证器都需要实现Validator
》可以选择继承ValidatorSupport或者FieldValidatorSupport
>若希望实现一个一般的验证器,则可以继承ValidatorSupport
》若希望实现一个字段验证器,则可以继承FieldValidatorSupport

》具体实现可以参考目前已经有的验证器

②在配置文件中配置验证器


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

》若类路径下没有指定的验证器,则从com.opensymphony.xwork2.validator.validators下的default.xml中的验证器加载
③使用:和目前的验证器一样




示例代码:自定义一个18位身份验证




编程验证  (不推荐)


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


ActionSupport类以及实现了Validateable接口


public void validate(){
if(name==null||name.trim().equals("")){
addFieldError("name",getText("name.null"));
}
}

你可能感兴趣的:(struts.xml,struts2.0)