`
txf2004
  • 浏览: 6874776 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Struts中对用户输入信息的校验方法对比:validate 和validator

阅读更多

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

一、在FormBean中手工实现

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

publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestreq)

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

1publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestreq){
2ActionErrorserrors=newActionErrors();
3
4Stringage=this.getAge();
5if(!this.isNumber(age)){//isNumber()isnotimplemented
6errors.add(,);
7}

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

相关推荐

Global site tag (gtag.js) - Google Analytics