这种基于Annotation的输入校验实质上也属于Struts 2“零配置”特性的部分,它允许使用Annotation来定义每个字段应该满足的规则,Struts 2在com.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代码中,会给后期维护带来一定困难。

基于Annotation的输入校验相关推荐

  1. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  2. Struts 2的输入校验(一)

    9 Struts 2的输入校验 输入校验有两种:客户端和服务器端校验.客户端校验一般是通过JavaScript来完成,这种校验可减轻服务器压力.服务器校验主要通过服务器端编程的方式来完成. (1) 客 ...

  3. Struts 2的输入校验(二)

    9.2 基于Struts 2验证框架的输入校验 Struts 2提供了更高效,简易的校验框架,用户只需设置校验配置文件即可完成输入校验.基于验证框架来完成输入校验,只需在与Action同目录下下创建一 ...

  4. java安全编码指南之:输入校验

    文章目录 简介 在字符串标准化之后进行校验 注意不可信字符串的格式化 小心使用Runtime.exec() 正则表达式的匹配 简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意 ...

  5. Struts 2读书笔记-----使用Struts 2的输入校验

               输入校验是所有的Web应用必须处理的问题.一个健壮的应用系统必须可以阻止一些非法的输入,防止这些非法的输入进入系统.这样才可以保证系统不受到影响. 输入校验可以分为客服端校验和服 ...

  6. 一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  7. SSM源码分析之Spring05-DI实现原理(基于Annotation 注入)

    目录导航 前言 注解的引入 AnnotationConfigApplicationContext 对注解Bean初始化 AnnotationConfigApplicationContext注册注解Be ...

  8. java密码安全验证_java安全编码指南之:输入校验

    简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验. 本文将带领大家探讨一下用户输入校验的一些场景.一起来看看吧. 在字符 ...

  9. java判断输入的格式化_java安全编码指南之:输入校验 - flydean - 博客园

    目录简介 在字符串标准化之后进行校验 注意不可信字符串的格式化 小心使用Runtime.exec() 正则表达式的匹配 简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意 ...

最新文章

  1. R语言dplyr包all_equal函数检查多个dataframe是否相同实战
  2. linux upx 报错 NotCompressibleException
  3. java修改文件的大小限制_Struts2修改上传文件大小限制方法解析
  4. 关于$'\r': command not found错误的一点体会
  5. JVM笔记(JVM内存+垃圾回收器)详解
  6. 阿里巴巴AI智能专场:整理分享
  7. C#委托和事件的应用Observer模式实例
  8. 使用 tftp 无法向服务器上传文件问题解决
  9. ccproxy8.0破解版
  10. 华为云Hadoop与Spark集群环境搭建
  11. Java Day24
  12. 如何在论文中画出漂亮的插图?
  13. c语言error c2198,为何会出现error C2198: 'create' : too few actual parameters呢?
  14. 安卓如何使用layout布局的弹出框AlertDialog
  15. AppleWebKit/537.36(KHTML,likeGecko)与cdn讲解
  16. [telink sig mesh] 按键及任意按键长按清空网络
  17. 腾讯游戏盒子当中的游戏医生功能分析
  18. pam php水解加碱,PAM酸性水解反应聚丙烯酰胺
  19. 分享几种锂电池均衡电路的工作原理
  20. 如何画出广义表的存储结构

热门文章

  1. http协议的队首阻塞
  2. Drawable Resource 之旅(一):BitmapDrawable 详解
  3. x86终端登录horizon view设置
  4. yii 操作cookie
  5. asp.net core系列 53 IdentityServer4 (IS4)介绍
  6. 【高性价比】AIO-3288C四核高性能主板
  7. MaxCompute大数据实践,电商数据仓库选择雪花还是星型模型?
  8. 查看EBS中BI Publisher的版本
  9. 美卫星拍最详细3D地图 覆盖地球99%大陆
  10. 公司网络问题----------网络设备老化的问题