基于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 ,如需转载请自行联系原作者

相关文章
|
10月前
|
分布式计算 大数据 流计算
玩转数据:初学者的大数据处理工具指南
玩转数据:初学者的大数据处理工具指南
300 14
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(16-3)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之List类型语法格式说明表及LPUSH/LPUSHX/LRANGE、LPOP/LLEN、LREM/LSET/LINDEX/LTRIM、LINSERT RPUSH/RPUSHX/RPOP/RPOPLPUSH等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
存储 监控 小程序
CleanMyMac是什么软件?好用吗?
你知道CleanMyMac是什么吗?它的字面意思为“清理我的Mac”,作为软件,那就是一款Mac清理工具 ,Mac OS X 系统下知名系统清理软件,是数以万计的Mac用户的选择。它可以流畅地与系统性能相结合,只需简单的步骤就可以节省硬盘空间,提高电脑的速度,时刻保持电脑的清洁和健康,监视和优化Mac的性能。
248 0
|
机器学习/深度学习 监控
初创企业的成长之路,如何走好第一步?
“作为公司管理,最让我难过的不是没有客户,而是客户来了把握不住!”-------来自某初创公司的管理者沟通交流 当代的企业竞争是残酷的,每个细节都可能决定着成败,做好服务是企业长久立足的根本,如何活下去?如何走好第一步?
|
关系型数据库 Go Docker
chart 模板 - 每天5分钟玩转 Docker 容器技术(165)
Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板。
3010 0
|
物联网 机器学习/深度学习 vr&ar
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
253 116