基于Annotation的输入校验

简介:

这种基于Annotation的输入校验实质上也属于Struts 2“零配置”特性的部分,它允许使用Annotation来定义每个字段应该满足的规则,Struts 2com.opensymphony.xwork2.validator.annotations包下提供了大量校验器相关的Annotation,这些Annotation和前面介绍的验证器大致上一一对应,读者可以自行查阅API文档。

为了在Action类通过Annotation指定验证规则,经过如下配置即可:

Ø  使用验证器Annotation修饰Action里各属性对应的setter方法。

下面我们在前面I18NValidate应用的基础上进行修改,将该应用的WEB-INF\src\lee路径下的校验规则文件删除,修改该路径下的RegistAction.java文件,通过注释指定各属性应该满足的规则。修改后的Action代码如下所示。

程序清单:codes\04\4.2\annotation\WEB-INF\src\org\crazyit\app\action\RegistAction.java

 

 
  1. public class RegistAction extends ActionSupport  
  2. {  
  3.     private String name;  
  4.     private String pass;  
  5.     private int age;  
  6.     private Date birth;   
  7.     //name属性的setter和getter方法  
  8.     //使用Annotation指定必填、正则表达式两个校验规则  
  9.     @RequiredStringValidator(key = "name.requried" 
  10.         , message = "")  
  11.     @RegexFieldValidator(expression = "\\w{4,25}" 
  12.         ,key = "name.regex" , message = "")  
  13.     public void setName(String name)  
  14.     {  
  15.         this.name = name;  
  16.     }  
  17.     public String getName()  
  18.     {  
  19.         return this.name;  
  20.     }  
  21.     //pass属性的setter和getter方法  
  22.     @RequiredStringValidator(key = "pass.requried" 
  23.         ,message = "")  
  24.     @RegexFieldValidator(expression = "\\w{4,25}" 
  25.         ,key = "pass.regex" ,message = "")  
  26.     public void setPass(String pass)  
  27.     {  
  28.         this.pass = pass;  
  29.     }  
  30.     public String getPass()  
  31.     {  
  32.         return this.pass;  
  33.     }  
  34.     //age属性的setter和getter方法  
  35.     @IntRangeFieldValidator(message = "" 
  36.         , key = "age.range", min = "1" 
  37.         , max = "150")  
  38.     public void setAge(int age)  
  39.     {  
  40.         this.age = age;  
  41.     }  
  42.     public int getAge()  
  43.     {  
  44.         return this.age;  
  45.     }  
  46.     //birth属性的setter和getter方法  
  47.     //使用Annotation指定日期范围校验规则  
  48.     @DateRangeFieldValidator(message = "" 
  49.         , key = "birth.range", min = "1900/01/01" 
  50.         , max = "2050/01/21")  
  51.     public void setBirth(Date birth)  
  52.     {  
  53.         this.birth = birth;  
  54.     }  
  55.     public Date getBirth()  
  56.     {  
  57.         return this.birth;  
  58.     }  
  59. }  

上面Action的粗体字代码使用了验证器Annotation修饰了各属性的setter方法,这样Struts 2就知道了各属性应该满足怎样的规则。通过在Action中使用Annotation指定各字段应该满足的校验规则,就可以避免书写XML校验规则文件。

关于使用Annotation来代替XML配置文件,这是JDK 1.5新增Annotation后的一个趋势,使用这种方式无须编写XML文件,从而可以简化应用开发,但带来的副作用是所有内容都被写入Java代码中,会给后期维护带来一定困难。

 


 

本文转自fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/887124 ,如需转载请自行联系原作者

相关文章
|
XML Java 数据格式
JavaConfig与常见Annotation(必知必会系列)
上一篇我们介绍了 Spring中Bean的生命周期,这一篇我们接着学习在Spring Boot中的一些常用注解。
130 0
JavaConfig与常见Annotation(必知必会系列)
|
安全 Java 编译器
一文带你全面深入理解Java注解Annotation
一文带你全面深入理解Java注解Annotation
207 1
一文带你全面深入理解Java注解Annotation
|
Java 开发者
annotation 实现 | 学习笔记
快速学习 annotation 实现,介绍了 annotation 实现系统机制, 以及在实际应用过程中如何使用。
62 0
annotation 实现 | 学习笔记
|
Java 数据库连接 API
|
存储 Java 数据库连接
Hibernate-Annotation(下)
Hibernate-Annotation(下)
Hibernate-Annotation(下)
|
开发框架 Java 编译器
Java注解Annotation小结
Java注解Annotation小结
|
Java 编译器
自定义Annotation(二)上
注解Annotation 很强大,很重要,是不是想要自己能够编写注解呢? 接下来,我们就可以尝试编写简单的注解了。
自定义Annotation(二)上
|
Java Spring
Regarding @Inject annotation
Regarding @Inject annotation
Regarding @Inject annotation
|
前端开发 安全 Java
Java注解(Annotation):请不要小看我!(1)
Java注解(Annotation):请不要小看我!
99 0
Java注解(Annotation):请不要小看我!(1)