`
阅读更多

在Struts中对用户输入信息的校验一般在FromBean中进行(除非需要访问数据库进行诸如登录信息的校验,因为这是Action的工作),本文将阐述如何在Struts中实现可配置的信息校验。

一、在FormBean中手工实现

最简单的方法是直接在FormBean中重写ActionForm类的validate方法,validate方法签名如下:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest req)

比如需要校验age字段必须填写数字:

 1public ActionErrors validate(ActionMapping mapping, HttpServletRequest req){
 2  ActionErrors errors = new ActionErrors();
 3
 4  String age = this.getAge();
 5  if(!this.isNumber(age))// isNumber() is not implemented
 6    errors.add(  ,  );
 7  }

 8
 9  return errors;
10}

在form提交后,容器会调用validate方法对表单数据进行校验,如果返回的ActionErrors为空(即校验通过),则将FormBean提交Action,否则重定向到提交form的页面。
这种方法实现简单,直观,容易测试、调试,但不可避免地存在以下缺点:

1、很难重用,导致重复开发
有很多校验逻辑在整个网站中是相同的,比如上述的数字校验,还有email校验、长度校验等等,而通过覆盖validate方法很难对这些校验过程进行重用,除非定义一些helper类封装校验方法(比如上述的isNumber())。而当需要为另一个FormBean加入相同的校验逻辑时必须重复地覆盖validate方法

2、难于扩展
当要对一个表单增、删、改校验逻辑时必须修改validate方法,重新打包、部署

3、不可配置
因为校验逻辑硬编码于class文件中,运行时不可能做到灵活地配置校验逻辑

因此,Struts中加入了另一种更灵活的校验机制:

二、使用Validator

Validator提供了一种基于xml配置文件的校验模型,要使用这一模型必须做如下实现:

1、FormBean继承org.apache.struts.validator.ValidatorForm而不是ActionForm

2、不覆盖validate方法

3、创建validator-rules.xml及validation.xml文件
validator-rules.xml定义了可用来配置的校验逻辑,如:

  1<form-validation>
  2   <global>
  3      <validator name="required"
  4            classname="org.apache.struts.validator.FieldChecks"
  5               method="validateRequired"
  6         methodParams="java.lang.Object,
  7                       org.apache.commons.validator.ValidatorAction,
  8                       org.apache.commons.validator.Field,
  9                       org.apache.struts.action.ActionMessages,
 10                       org.apache.commons.validator.Validator,
 11                       javax.servlet.http.HttpServletRequest"
 12                  msg="errors.required"/>
 13      <validator name="requiredif"
 14                 classname="org.apache.struts.validator.FieldChecks"
 15                 method="validateRequiredIf"
 16                 methodParams="java.lang.Object,
 17                               org.apache.commons.validator.ValidatorAction,
 18                               org.apache.commons.validator.Field,
 19                               org.apache.struts.action.ActionMessages,
 20                               org.apache.commons.validator.Validator,
 21                               javax.servlet.http.HttpServletRequest"
 22                 msg="errors.required"/>
 23      <validator name="validwhen"
 24          msg="errors.required"
 25                 classname="org.apache.struts.validator.validwhen.ValidWhen"
 26                 method="validateValidWhen"
 27                 methodParams="java.lang.Object,
 28                       org.apache.commons.validator.ValidatorAction,
 29                       org.apache.commons.validator.Field,
 30                       org.apache.struts.action.ActionMessages,
 31                       org.apache.commons.validator.Validator,
 32                       javax.servlet.http.HttpServletRequest"/>
 33      <validator name="minlength"
 34            classname="org.apache.struts.validator.FieldChecks"
 35               method="validateMinLength"
 36         methodParams="java.lang.Object,
 37                       org.apache.commons.validator.ValidatorAction,
 38                       org.apache.commons.validator.Field,
 39                       org.apache.struts.action.ActionMessages,
 40                       org.apache.commons.validator.Validator,
 41                       javax.servlet.http.HttpServletRequest"
 42              depends=""
 43                  msg="errors.minlength"
 44           jsFunction="org.apache.commons.validator.javascript.validateMinLength"/>
 45      <validator name="maxlength"
 46            classname="org.apache.struts.validator.FieldChecks"
 47               method="validateMaxLength"
 48         methodParams="java.lang.Object,
 49                       org.apache.commons.validator.ValidatorAction,
 50                       org.apache.commons.validator.Field,
 51                       org.apache.struts.action.ActionMessages,
 52                       org.apache.commons.validator.Validator,
 53                       javax.servlet.http.HttpServletRequest"
 54              depends=""
 55                  msg="errors.maxlength"
 56           jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/>
 57      <validator name="mask"
 58            classname="org.apache.struts.validator.FieldChecks"
 59               method="validateMask"
 60         methodParams="java.lang.Object,
 61                       org.apache.commons.validator.ValidatorAction,
 62                       org.apache.commons.validator.Field,
 63                       org.apache.struts.action.ActionMessages,
 64                       org.apache.commons.validator.Validator,
 65                       javax.servlet.http.HttpServletRequest"
 66              depends=""
 67                  msg="errors.invalid"/>
 68      <validator name="byte"
 69            classname="org.apache.struts.validator.FieldChecks"
 70               method="validateByte"
 71         methodParams="java.lang.Object,
 72                       org.apache.commons.validator.ValidatorAction,
 73                       org.apache.commons.validator.Field,
 74                       org.apache.struts.action.ActionMessages,
 75                       org.apache.commons.validator.Validator,
 76                       javax.servlet.http.HttpServletRequest"
 77              depends=""
 78                  msg="errors.byte"
 79       jsFunctionName="ByteValidations"/>
 80      <validator name="short"
 81            classname="org.apache.struts.validator.FieldChecks"
 82               method="validateShort"
 83         methodParams="java.lang.Object,
 84                       org.apache.commons.validator.ValidatorAction,
 85                       org.apache.commons.validator.Field,
 86                       org.apache.struts.action.ActionMessages,
 87                       org.apache.commons.validator.Validator,
 88                       javax.servlet.http.HttpServletRequest"
 89              depends=""
 90                  msg="errors.short"
 91       jsFunctionName="ShortValidations"/>
 92      <validator name="integer"
 93            classname="org.apache.struts.validator.FieldChecks"
 94               method="validateInteger"
 95         methodParams="java.lang.Object,
 96                       org.apache.commons.validator.ValidatorAction,
 97                       org.apache.commons.validator.Field,
 98                       org.apache.struts.action.ActionMessages,
 99                       org.apache.commons.validator.Validator,
100                       javax.servlet.http.HttpServletRequest"
101              depends=""
102                  msg="errors.integer"
103       jsFunctionName="IntegerValidations"/>
104      <validator name="long"
105            classname="org.apache.struts.validator.FieldChecks"
106               method="validateLong"
107         methodParams="java.lang.Object,
108                       org.apache.commons.validator.ValidatorAction,
109                       org.apache.commons.validator.Field,
110                       org.apache.struts.action.ActionMessages,
111                       org.apache.commons.validator.Validator,
112                       javax.servlet.http.HttpServletRequest"
113              depends=""
114                  msg="errors.long"/>
115      <validator name="float"
116            classname="org.apache.struts.validator.FieldChecks"
117               method="validateFloat"
118         methodParams="java.lang.Object,
119                       org.apache.commons.validator.ValidatorAction,
120                       org.apache.commons.validator.Field,
121                       org.apache.struts.action.ActionMessages,
122                       org.apache.commons.validator.Validator,
123                       javax.servlet.http.HttpServletRequest"
124              depends=""
125                  msg="errors.float"
126       jsFunctionName="FloatValidations"/>
127      <validator name="double"
128            classname="org.apache.struts.validator.FieldChecks"
129               method="validateDouble"
130         methodParams="java.lang.Object,
131                       org.apache.commons.validator.ValidatorAction,
132                       org.apache.commons.validator.Field,
133                       org.apache.struts.action.ActionMessages,
134                       org.apache.commons.validator.Validator,
135                       javax.servlet.http.HttpServletRequest"
136              depends=""
137                  msg="errors.double"/>
138      <validator name="date"
139            classname="org.apache.struts.validator.FieldChecks"
140               method="validateDate"
141         methodParams="java.lang.Object,
142                       org.apache.commons.validator.ValidatorAction,
143                       org.apache.commons.validator.Field,
144                       org.apache.struts.action.ActionMessages,
145                       org.apache.commons.validator.Validator,
146                       javax.servlet.http.HttpServletRequest"
147              depends=""
148                  msg="errors.date"
149       jsFunctionName="DateValidations"/>
150      <validator name="intRange"
151            classname="org.apache.struts.validator.FieldChecks"
152               method="validateIntRange"
153         methodParams="java.lang.Object,
154                       org.apache.commons.validator.ValidatorAction,
155                       org.apache.commons.validator.Field,
156                       org.apache.struts.action.ActionMessages,
157                       org.apache.commons.validator.Validator,
158                       javax.servlet.http.HttpServletRequest"
159              depends="integer"
160                  msg="errors.range"/>
161      <validator name="floatRange"
162            classname="org.apache.struts.validator.FieldChecks"
163               method="validateFloatRange"
164         methodParams="java.lang.Object,
165                       org.apache.commons.validator.ValidatorAction,
166                       org.apache.commons.validator.Field,
167                       org.apache.struts.action.ActionMessages,
168                       org.apache.commons.validator.Validator,
169                       javax.servlet.http.HttpServletRequest"
170              depends="float"
171                  msg="errors.range"/>
172      <validator name="doubleRange"
173            classname="org.apache.struts.validator.FieldChecks"
174               method="validateDoubleRange"
175         methodParams="java.lang.Object,
176                       org.apache.commons.validator.ValidatorAction,
177                       org.apache.commons.validator.Field,
178                       org.apache.struts.action.ActionMessages,
179                       org.apache.commons.validator.Validator,
180                       javax.servlet.http.HttpServletRequest"
181              depends="double"
182                  msg="errors.range"/>
183      <validator name="creditCard"
184            classname="org.apache.struts.validator.FieldChecks"
185               method="validateCreditCard"
186         methodParams="java.lang.Object,
187                       org.apache.commons.validator.ValidatorAction,
188                       org.apache.commons.validator.Field,
189                       org.apache.struts.action.ActionMessages,
190                       org.apache.commons.validator.Validator,
191                       javax.servlet.http.HttpServletRequest"
192              depends=""
193                  msg="errors.creditcard"/>
194      <validator name="email"
195            classname="org.apache.struts.validator.FieldChecks"
196               method="validateEmail"
197         methodParams="java.lang.Object,
198                       org.apache.commons.validator.ValidatorAction,
199                       org.apache.commons.validator.Field,
200                       org.apache.struts.action.ActionMessages,
201                       org.apache.commons.validator.Validator,
202                       javax.servlet.http.HttpServletRequest"
203              depends=""
204                  msg="errors.email"/>
205      <validator name="url"
206            classname="org.apache.struts.validator.FieldChecks"
207               method="validateUrl"
208         methodParams="java.lang.Object,
209                       org.apache.commons.validator.ValidatorAction,
210                       org.apache.commons.validator.Field,
211                       org.apache.struts.action.ActionMessages,
212                       org.apache.commons.validator.Validator,
213                       javax.servlet.http.HttpServletRequest"
214              depends=""
215                  msg="errors.url"/>
216     <!--
217       This simply allows struts to include the validateUtilities into a page, it should
218       not be used as a validation rule.
219     -->
220     <validator name="includeJavaScriptUtilities"
221            classname=""
222               method=""
223         methodParams=""<
分享到:
评论

相关推荐

    Struts 1.1 Validator 校验实例

    Struts 1.1 Validator 校验实例 完全代码, 直接工程 导入 &lt;br&gt;参考 Struts in action 上面修改!!!

    struts2用户登录实例的validator后台校验

    通过用户登录的例子,用Struts2的validator做后台的校验

    Struts 2校验框架的应用

    ... (3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-...(5):所有提示信息均要用到国际化资源文件实现。 (6):注册成功返回success.jsp页面,显示所有注册信息。

    Struts1.3 Validator 验证框架校验Email 例子

    Struts1.3 与1.2向比验证框架部分还是有所区别的,该例子通过一个简单的Email的校验,演示如何通过Struts Validate验证框架进行在页面中生成JavaScripte脚本,进行客户端校验。下完后记得评分,资源分就会回来,还能...

    Struts Validator验证器使用指南.pdf

    Struts Validator验证器使用指南中详细描述了校验器的使用

    Struts的全局异常控制和common-validator校验框架

    Struts的全局异常控制和common-validator校验框架.doc

    自定义校验注解框架(validator)

    自定义注解参数校验框架,根据项目开发中参数校验情况手写一套框架,供大家学习参考使用。可以直接运用在项目中,如果漏洞请留言,小编会第一时间修复,如果好用请给个好评,谢谢。

    Struts2之Validator验证框架的详细介绍

    Struts2中提供了数据校验验证数据例如验证邮件、数字等,本篇文章介绍了Struts2之Validator的详细介绍,有兴趣的可以了解一下。

    实战STRUTS 电子书

    本书完整介绍了Struts框架结构,涵盖了设计、数据校验、数据库访问、动态页面生成、本地化、Struts配置以及其他一些重要的方面。书中还介绍了如何同时使用JSP标签和Velocity模板,并仔细介绍了Struts体系结构以及...

    struts2校验器_xml格式

    使用struts2验证form表单信息_xml格式

    网上购物系统struts+Oracle10.2

    struts做的一个网上购物系统的练习,包括了以下几个方面的内容: 1.struts国际化处理, ...4.Validator校验, 5.自定义异常处理, 6.JNDI+Oracle10.2数据库连接池的配置 7.iterate迭代器和JAVA泛型的用法

    动态验证框架validator

    介绍动态验证框架validator非常清楚,很值得参考,希望大家都来看看。

    Struts-Jar

    struts的验证框架依赖以下的两个包: commons-validator.jar (校验方法)和校验规则。

    java面试宝典

    156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...

    千方百计笔试题大全

    156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring 2.0 开发参考手册

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Jfinal官网demo

    JFinal教程手册 JFinal特点 MVC 架构,设计精巧,使用简单 遵循 COC 原则,零配置,无 xml ...强大的 Validator 后端校验功能 功能齐全,拥有 struts2 绝大部分核心功能 体积小仅 303K,且无第三方依赖

    JFinal jar包

    JFinal开发所需的jar包MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ...强大的Validator后端校验功能 功能齐全,拥有struts2的绝大部分功能 体积小仅248K,且无第三方依赖

    JFinal-手册-1.3

    JFinal有如下主要特点: MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利...强大的Validator后端校验功能 功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖

Global site tag (gtag.js) - Google Analytics