在Struts中使用Validator实现可配置的信息校验(一)

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

一、在FormBean中手工实现

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

None.gif public  ActionErrors validate(ActionMapping mapping, HttpServletRequest req)

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

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

 8InBlock.gif
 9InBlock.gif  return errors;
10ExpandedBlockEnd.gif}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值