`
阅读更多

在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=""<
分享到:
评论

相关推荐

    Struts1的validator验证框架

    ### Struts1的Validator验证框架详解 ...然而,随着技术的发展,现代Web应用可能更倾向于使用Spring MVC、AngularJS等新兴框架,但Struts1的Validator框架依然有其不可替代的价值,特别是在遗留系统维护和优化方面。

    Struts2 校验器

    5. **校验结果处理**:当验证失败时,Struts2会将错误信息添加到ActionContext中,然后可以通过OGNL表达式在JSP页面中展示。同时,Action的execute方法不会执行,直到所有验证都通过。 6. **拦截器(Interceptor)*...

    Struts的Validator-rules详解

    总的来说,Struts的Validator-rules是实现数据验证的重要工具,它通过XML配置简化了验证规则的声明,提高了代码的可维护性。理解并熟练运用Validator-rules能够有效地防止因用户输入错误导致的程序异常,提升应用的...

    Struts2输入校验总结

    反之,如果校验失败,会转向`input`视图资源,通常是在Struts2配置文件中指定的,用于显示错误信息给用户。 #### 三、基于验证框架的输入校验 除了手动校验,Struts2还提供了一个强大的验证框架,支持更复杂的校验...

    struts用户注册登录用校验器校验信息

    在用户注册登录的场景中,Struts 提供了强大的验证功能,通过校验器(Validator)来确保用户输入的数据符合预设的规则,从而提高应用的安全性和用户体验。 在这个例子中,我们关注的是如何使用Struts的校验框架来...

    struts2的数据校验

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化和灵活的Web应用程序。在Struts2中,数据校验...无论是在大型企业项目还是小型个人项目中,Struts2的数据校验功能都是一个不可忽视的重要组成部分。

    struts2输入校验深入总结

    开发者可以创建实现`Validator`接口的类,定义自己的校验逻辑,并在struts.xml中配置使用。 六、校验结果处理 当输入校验失败时,Struts2会将错误信息存储在`FieldErrors`对象中,可以通过`ActionContext`获取。...

    struts2 对action中的所有方法进行校验

    校验规则通常定义在XML配置文件或注解中,这样可以将业务逻辑与表现层分离,提高代码可维护性。 1. XML配置文件校验: 在struts.xml或类似的配置文件中,我们可以为每个Action定义一个对应的validate()方法。这个...

    struts2中的输入校验

    - **页面显示**:Field级别的错误信息会被自动显示在页面相应字段旁边,而Action级别的错误信息需要在JSP页面中使用`&lt;s:actionerror&gt;`标签来显示。 2. **校验框架**: - **XML配置文件**:Struts2支持基于XML的...

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

    在"struts2_1.7_validator"这个压缩包中,可能包含了实现Struts2用户登录验证的示例代码。 Struts2的Validator框架是基于Apache Commons BeanUtils和Apache Commons DBCP的,它可以自动将表单字段映射到Action类的...

    Struts2自定义校验框架

    - XML配置:在`struts.xml`或相应的Action配置文件中,使用`&lt;validators&gt;`标签定义自定义校验器,通过`&lt;field-validator&gt;`指定需要应用该校验器的字段。 - 注解配置:在Action类的属性上使用自定义注解,通过注解...

    struts2输入校验

    这需要实现`Validator`接口并配置在`struts.xml`中。 5. **结果处理**: 校验失败后,Struts2会根据配置的`action`标签中的`input`属性值重定向到相应的视图,显示错误消息。错误消息可以通过`ActionContext`获取...

    struts1.3实现的Validator简单验证

    在这个简单的验证例子中,我们将探讨如何利用Struts1.3的Validator来实现对用户输入的有效性检查。 Validator的核心功能是提供了一种机制,允许开发者在服务器端对用户提交的数据进行校验,确保数据的正确性和安全...

    struts2笔记之校验表单信息

    在Struts2中,表单数据的校验是一个关键环节,用于确保用户提交的数据符合预期的格式和规则。本篇笔记将详细讲解Struts2中服务器端与客户端对表单数据的校验方式。 首先,Struts2提供了一系列内置的校验器,包括: ...

    Struts 1.1 Validator 校验实例

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

    struts2 简单数据校验

    - 使用`@Constraint`注解定义自定义校验注解,并在Action类中使用这个自定义注解。 5. **错误处理**: - Struts2提供ActionError和FieldError对象来存储校验错误,它们会被自动映射到JSP页面上显示。 - 可以通过...

    Struts2校验框架应用

    本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、以及如何在实际项目中实现数据验证。 **1. Struts2校验框架基础** Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义校验...

    Struts使用validation框架来实现校验,4种以上的校验规则

    在实现这些规则时,首先需要在ActionForm类中定义字段,并添加对应的校验注解。然后,创建一个对应的ValidatorForm子类,覆盖`validate`方法。在`struts-config.xml`中,配置该ActionForm并关联校验规则。最后,当...

    Struts的Validator验证框架使用教程

    它提供了强大的、可扩展的验证规则,使得开发者可以方便地在应用程序中实施数据校验,从而保证了数据的准确性和安全性。这篇教程将带你深入了解如何使用Struts的Validator框架。 一、Struts Validator框架概述 ...

    struts2输入校验总结

    总结,Struts2的输入校验机制提供了手动和自动两种方式,结合配置文件和内置校验器,能够实现灵活且强大的数据校验,有效地防止了非法数据的流入,提升了系统的安全性。在实际开发中,开发者可以根据业务需求选择...

Global site tag (gtag.js) - Google Analytics