struts2 验证方式

struts2支持三种验证方式:
     1.使用Annotations验证
     2.基于XML配置的验证
     3.手动验证

 

 一个简单的例子

SimpleAnnotationAction.Java

 

package com.struts2.validation;
import org.apache.struts2.interceptor.validation.SkipValidation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;

@Validations(requiredStrings={
        @RequiredStringValidator(fieldName="userName",message="用户名不能为空!"),
        @RequiredStringValidator(fieldName="userName",message="密码不能为空!")
    }
)

publicclass SimpleAnnotationAction extends ActionSupport { private String userName; private String password; @Override @Validations(requiredFields={ @RequiredFieldValidator(type=ValidatorType.SIMPLE,fieldName="userName",message="用户名不能为null!!") } ) public String execute() throws Exception { returnsuper.execute(); } /*运行:http://localhost:8080/struts2/validation/simpleAnnotationLogin.action 结果: 用户名不能为空! 密码不能为空! 用户名不能为null!! 密码不能为null!! */ @Validations(requiredFields={ @RequiredFieldValidator(type=ValidatorType.SIMPLE,fieldName="password",message="密码不能为null!!") } ) public String login(){ return"success"; }

/*运行:http://localhost:8080/struts2/validation/simpleAnnotationLogin2.action 结果: 用户名不能为空! 密码不能为空! 用户名不能为null!! 密码不能为null!! */public String login2(){ return"success"; } /*运行:http://localhost:8080/struts2/validation/simpleAnnotationLogin2.action 结果:页面发生跳转 */ @SkipValidation public String login3(){ return"success"; } /*运行:http://localhost:8080/struts2/validation/simpleAnnotationLogin2.action 结果:页面发生跳转 */public String login5(){ return"success"; } public String getUserName() {return userName;} publicvoid setUserName(String userName) {this.userName = userName;} public String getPassword() {return password;} publicvoid setPassword(String password) {this.password = password;} }

struts.xml
 <package name="validation" namespace="/validation" extends="struts-default">
        <action name="simpleAnnotationLogin" class="com.struts2.validation.SimpleAnnotationAction" method="login">
            <result name="input">/SimpleAnnotation.jsp</result>
            <result name="success" type="redirect">/LoginSuccess.jsp</result>
        </action>
        <action name="simpleAnnotationLogin2" class="com.struts2.validation.SimpleAnnotationAction" method="login2">
            <result name="input">/SimpleAnnotation.jsp</result>
            <result name="success" type="redirect">/LoginSuccess.jsp</result>
        </action>
        
        <action name="simpleAnnotationLogin3" class="com.struts2.validation.SimpleAnnotationAction" method="login3">
            <result name="input">/SimpleAnnotation.jsp</result>
            <result name="success" type="redirect">/LoginSuccess.jsp</result>
        </action>

        <action name="simpleAnnotationLogin5" class="com.struts2.validation.SimpleAnnotationAction" method="login5">
            <interceptor-ref name="validation">
                <param name="validateAnnotatedMethodOnly">true</param>
            </interceptor-ref>
            <result name="input">/SimpleAnnotation.jsp</result>
            <result name="success" type="redirect">/LoginSuccess.jsp</result>
        </action>    
    </package>

SimpleAnnotation.jsp

 

LoginSuccess.jsp

 

结论
   1.Action类中使用Validations Annotation定义验证。
   2.Action中,可以在方法上、类上定义验证Annotations,所有的验证器都将同时作用在映射为Action的方法上。
   3.Action中有多个方法被映射为Action时,类上和方法上所有定义的验证Annotations都将作用在每个映射为Action的方法上。
   4.Action中校验失败时,返回input逻辑视图
   5.可以使用@SkipValidation跳过所有的验证检查,包括自身方法定义的校验器。
   6.可以在Action映射中使用如下代码跳过校验检查
     <interceptor-ref name="validation">
         <param name="validateAnnotatedMethodOnly">true</param>
     </interceptor-ref>

  二  校验器使用说明

1.Validations Annotation的使用
 Validations中定义了一些验证器的数组,用于存放验证规则,定义如下
 public @interface Validations {
 //自定义校验器数组
    public CustomValidator[] customValidators() default {};
    //字段转换错误校验器数组
    public ConversionErrorFieldValidator[] conversionErrorFields() default {};
    //日期范围校验器
    public DateRangeFieldValidator[] dateRangeFields() default {};
 //Email校验器
    public EmailValidator[] emails() default {};
 //字段表达式校验器
    public FieldExpressionValidator[] fieldExpressions() default {};
 //整数范围校验器
    public IntRangeFieldValidator[] intRangeFields() default {};
 //必填字段校验器
    public RequiredFieldValidator[] requiredFields() default {};
 //必填字符串校验器
    public RequiredStringValidator[] requiredStrings() default {};
 //字符串长度校验器
    public StringLengthFieldValidator[] stringLengthFields() default {};
 //URL校验器
    public UrlValidator[] urls() default {};
    //带条件的Vistor校验器
    public ConditionalVisitorFieldValidator[] conditionalVisitorFields() default {};
 //Vistor校验器
    public VisitorFieldValidator[] visitorFields() default {};
 //正则表达式校验器
    public RegexFieldValidator[] regexFields() default {};
 //表达式校验器
    public ExpressionValidator[] expressions() default {};
}

2.@RequiredStringValidator —— 必填字符串校验器
 校验要求:指定字段不能为null且字符串长度大于0
 参数: fieldName:校验字段名
    trim:校验时取出字符串两边的空格,默认为true
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
3.RequiredFieldValidator —— 必填校验器
 校验要求:指定字段不能为null
 参数: fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息

4.IntRangeFieldValidator —— 整数范围校验器
 校验要求:int、long、short字段的整数值在指定的范围内
 参数:min:指定最小值,可选,没有则不检查最小值
    max:指定最大值,可选,没有则不检查最大值
    fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
5.DateRangeFieldValidator —— 日期范围校验器
 校验要求:日期在指定的范围内  
 参数:min:指定最小值,可选,没有则不检查最小值
    max:指定最大值,可选,没有则不检查最大值 
    fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
      
6.EmailValidator —— Email地址校验器
 校验要求:指定的字段为Email地址
 参数: fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
7.ExpressionValidator —— 表达式校验器
 校验要求:指定的ONGL表达式返回true。
 参数: expression:ONGL表达式  
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
      
8.UrlValidator —— URL校验器
 校验要求:校验指定的字段值是否为合法的URL
 参数: fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
9.StringLengthFieldValidator —— 字符串长度校验器
 校验要求:字符串长度在指定的范围内
 参数:minLength:指定最小长度,可选,没有则不检查最小长度
    maxLength:指定最大长度,可选,没有则不检查最大长度 
    trim:校验时取出字符串两边的空格,默认为true
    fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
    
10.ConversionErrorFieldValidator —— 转换错误校验器
 校验要求:校验指定字段是否发生类型转换错误
 参数: fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
11.VisitorFieldValidator —— Vistor校验器
 说明:普通校验器只能校验基本数据类型和字符串类型,该校验器可以校验对象里面的属性。
 参数:context:用于校验的context
    appendPrefix: 校验发生错误时是否在错误信息中添加前最消息
    fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
12. RegexFieldValidator —— 正则表达式校验器
 校验要求:指定字段匹配指定的正则表达式
 参数:expression:正则表达式
    fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
13.ConditionalVisitorFieldValidator —— 带条件的Vistor校验器
 验证要求:在条件不满足时,和Vistor校验器功能一样,条件满足则不执行Vistor校验
 参数: fieldName:校验字段名
    message:校验失败时的消息
    key:校验失败时返回i18n中指定名称的消息
   
14.CustomValidator —— 自定义校验器 
 校验器:自定义校验器

 

 


 

posted @ 2017-04-08 14:11  每一天,为明天  阅读(502)  评论(0编辑  收藏  举报