- 浏览: 39301 次
- 性别:
- 来自: 北京
文章分类
最新评论
在Struts中使用Validator实现可配置的信息校验(一)
在Struts中对用户输入信息的校验一般在FromBean中进行(除非需要访问数据库进行诸如登录信息的校验,因为这是Action的工作),本文将阐述如何在Struts中实现可配置的信息校验。
一、在FormBean中手工实现
最简单的方法是直接在FormBean中重写ActionForm类的validate方法,validate方法签名如下:
比如需要校验age字段必须填写数字:
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定义了可用来配置的校验逻辑,如:
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=""<
发表评论
-
在Java中使用Oracle blob
2005-02-13 22:27 773Oracle中的lob (Large Object)可以存储非 ... -
java.util.StringTokenization
2005-02-13 22:29 642今天室友老七做数据库大作业,其中要实现一个功能,就是输入一个以 ... -
JBuilder 2005中的Servlet mapping
2005-02-13 22:30 699使用JB进行Servlet好像很方便的样子,但是servlet ... -
static与final变量
2005-08-04 12:27 745一、illegal forward refrence 前天写一 ... -
使用策略模式(Strategy)实现多关键字排序
2005-08-04 12:37 791“策略模式”的出现,是为了提供一套相互之间可灵活替换的算法, ... -
Alloy
2005-08-04 13:09 658Alloy look and feel(http:// ... -
IDEA
2005-08-04 13:11 923今天在TSS上看到IntelliJ的IDEA 5.0终于rel ... -
原型模式(Prototype)
2005-08-05 10:54 742一、概述 原型模式属于对象创建模式,通过给出一个原型对象来指明 ... -
IDEA破解过程
2005-08-05 19:11 1804开场白就不说了,直接切入正题吧。本破解的前提是安装了IDEA ... -
适配器模式(Adapter)
2005-08-06 19:39 619一、概述 类的适配器模式把被适配的类的API转换成为目标类的A ... -
A beginners guide to Dependency Injection [转载自TSS]
2005-08-08 22:30 817Scope This article presents a h ... -
Alloy破解过程
2005-08-09 15:42 8691package com.incors.plaf. ... -
接口与Object类的关系?
2005-08-19 13:53 1108今天凌晨coding的时候发现一个很有趣的现象。“Object ... -
缺省适配器模式(Default Adapter)
2005-09-06 12:01 779一、概述 当不需要全部实现适配器接口提供的方法时,可先设计一个 ... -
Object Modeling Strategies (I)
2005-09-08 10:12 590Activities and model components ... -
Joshua Bloch咏Tiger诗八首
2005-09-08 16:59 839“Ease of Development”是J2SE 1.5的 ... -
James Gosling
2005-09-14 22:01 770今天是Java China 2005的最后一天,下午没有去各个 ... -
Object Modeling Strategies (II)
2005-09-19 15:23 622Str#1d. "Invest an Hour&qu ... -
Object Modeling Strategies (III)
2005-09-19 15:26 563Identifying system purpose and ... -
Tomcat 5.5.9 不支持switch(<enum>)?
2005-09-19 18:51 811ServiceExceptionType: package p ...
相关推荐
### Struts1的Validator验证框架详解 ...然而,随着技术的发展,现代Web应用可能更倾向于使用Spring MVC、AngularJS等新兴框架,但Struts1的Validator框架依然有其不可替代的价值,特别是在遗留系统维护和优化方面。
5. **校验结果处理**:当验证失败时,Struts2会将错误信息添加到ActionContext中,然后可以通过OGNL表达式在JSP页面中展示。同时,Action的execute方法不会执行,直到所有验证都通过。 6. **拦截器(Interceptor)*...
总的来说,Struts的Validator-rules是实现数据验证的重要工具,它通过XML配置简化了验证规则的声明,提高了代码的可维护性。理解并熟练运用Validator-rules能够有效地防止因用户输入错误导致的程序异常,提升应用的...
反之,如果校验失败,会转向`input`视图资源,通常是在Struts2配置文件中指定的,用于显示错误信息给用户。 #### 三、基于验证框架的输入校验 除了手动校验,Struts2还提供了一个强大的验证框架,支持更复杂的校验...
在用户注册登录的场景中,Struts 提供了强大的验证功能,通过校验器(Validator)来确保用户输入的数据符合预设的规则,从而提高应用的安全性和用户体验。 在这个例子中,我们关注的是如何使用Struts的校验框架来...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化和灵活的Web应用程序。在Struts2中,数据校验...无论是在大型企业项目还是小型个人项目中,Struts2的数据校验功能都是一个不可忽视的重要组成部分。
开发者可以创建实现`Validator`接口的类,定义自己的校验逻辑,并在struts.xml中配置使用。 六、校验结果处理 当输入校验失败时,Struts2会将错误信息存储在`FieldErrors`对象中,可以通过`ActionContext`获取。...
校验规则通常定义在XML配置文件或注解中,这样可以将业务逻辑与表现层分离,提高代码可维护性。 1. XML配置文件校验: 在struts.xml或类似的配置文件中,我们可以为每个Action定义一个对应的validate()方法。这个...
- **页面显示**:Field级别的错误信息会被自动显示在页面相应字段旁边,而Action级别的错误信息需要在JSP页面中使用`<s:actionerror>`标签来显示。 2. **校验框架**: - **XML配置文件**:Struts2支持基于XML的...
在"struts2_1.7_validator"这个压缩包中,可能包含了实现Struts2用户登录验证的示例代码。 Struts2的Validator框架是基于Apache Commons BeanUtils和Apache Commons DBCP的,它可以自动将表单字段映射到Action类的...
- XML配置:在`struts.xml`或相应的Action配置文件中,使用`<validators>`标签定义自定义校验器,通过`<field-validator>`指定需要应用该校验器的字段。 - 注解配置:在Action类的属性上使用自定义注解,通过注解...
这需要实现`Validator`接口并配置在`struts.xml`中。 5. **结果处理**: 校验失败后,Struts2会根据配置的`action`标签中的`input`属性值重定向到相应的视图,显示错误消息。错误消息可以通过`ActionContext`获取...
在这个简单的验证例子中,我们将探讨如何利用Struts1.3的Validator来实现对用户输入的有效性检查。 Validator的核心功能是提供了一种机制,允许开发者在服务器端对用户提交的数据进行校验,确保数据的正确性和安全...
在Struts2中,表单数据的校验是一个关键环节,用于确保用户提交的数据符合预期的格式和规则。本篇笔记将详细讲解Struts2中服务器端与客户端对表单数据的校验方式。 首先,Struts2提供了一系列内置的校验器,包括: ...
Struts 1.1 Validator 校验实例 完全代码, 直接工程 导入 <br>参考 Struts in action 上面修改!!!
- 使用`@Constraint`注解定义自定义校验注解,并在Action类中使用这个自定义注解。 5. **错误处理**: - Struts2提供ActionError和FieldError对象来存储校验错误,它们会被自动映射到JSP页面上显示。 - 可以通过...
本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、以及如何在实际项目中实现数据验证。 **1. Struts2校验框架基础** Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义校验...
在实现这些规则时,首先需要在ActionForm类中定义字段,并添加对应的校验注解。然后,创建一个对应的ValidatorForm子类,覆盖`validate`方法。在`struts-config.xml`中,配置该ActionForm并关联校验规则。最后,当...
它提供了强大的、可扩展的验证规则,使得开发者可以方便地在应用程序中实施数据校验,从而保证了数据的准确性和安全性。这篇教程将带你深入了解如何使用Struts的Validator框架。 一、Struts Validator框架概述 ...
总结,Struts2的输入校验机制提供了手动和自动两种方式,结合配置文件和内置校验器,能够实现灵活且强大的数据校验,有效地防止了非法数据的流入,提升了系统的安全性。在实际开发中,开发者可以根据业务需求选择...