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

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

一、在FormBean中手工实现

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

在Struts中对用户输入信息的校验方法对比:validate 和validatorpublic ActionErrors validate(ActionMapping mapping, HttpServletRequest req)

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

 1在Struts中对用户输入信息的校验方法对比:validate 和validator在Struts中对用户输入信息的校验方法对比:validate 和validatorpublic ActionErrors validate(ActionMapping mapping, HttpServletRequest req)在Struts中对用户输入信息的校验方法对比:validate 和validator{
 2在Struts中对用户输入信息的校验方法对比:validate 和validator  ActionErrors errors = new ActionErrors();
 3在Struts中对用户输入信息的校验方法对比:validate 和validator
 4在Struts中对用户输入信息的校验方法对比:validate 和validator  String age = this.getAge();
 5在Struts中对用户输入信息的校验方法对比:validate 和validator在Struts中对用户输入信息的校验方法对比:validate 和validator  if(!this.isNumber(age))在Struts中对用户输入信息的校验方法对比:validate 和validator// isNumber() is not implemented
 6在Struts中对用户输入信息的校验方法对比:validate 和validator    errors.add( 在Struts中对用户输入信息的校验方法对比:validate 和validator , 在Struts中对用户输入信息的校验方法对比:validate 和validator );
 7在Struts中对用户输入信息的校验方法对比:validate 和validator  }

 8在Struts中对用户输入信息的校验方法对比:validate 和validator
 9在Struts中对用户输入信息的校验方法对比:validate 和validator  return errors;
10在Struts中对用户输入信息的校验方法对比:validate 和validator}

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

该配置文件的具体格式请查阅Struts的官方文档。可以看出其中对很多常用的校验逻辑进行了封装,比如数字校验(92行到103行),长度校验(33行到56行)等。

而validation.xml则是Validator的核心,其中可对各个FormBean中需要校验字段及校验逻辑进行灵活的配置:

 1在Struts中对用户输入信息的校验方法对比:validate 和validator<form-validation>
 2在Struts中对用户输入信息的校验方法对比:validate 和validator   <formset>
 3在Struts中对用户输入信息的校验方法对比:validate 和validator      <form name="login">
 4在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="username" depends="required"/>
 5在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="password" depends="required"/>
 6在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="input" depends="required,codeinput"/>
 7在Struts中对用户输入信息的校验方法对比:validate 和validator      </form>
 8在Struts中对用户输入信息的校验方法对比:validate 和validator      <form name="search">
 9在Struts中对用户输入信息的校验方法对比:validate 和validator        <field property="keyword" depends="required"/>
10在Struts中对用户输入信息的校验方法对比:validate 和validator      </form>
11在Struts中对用户输入信息的校验方法对比:validate 和validator      <form name="signin">
12在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="username" depends="required"/>
13在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="password" depends="required"/>
14在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="passagain" depends="required"/>
15在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="question" depends="required,userinfo"/>
16在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="answer" depends="required,userinfo"/>
17在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="age" depends="required,integer"/>
18在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="input" depends="required,codeinput"/>
19在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="email" depends="email"/>
20在Struts中对用户输入信息的校验方法对比:validate 和validator      </form>
21在Struts中对用户输入信息的校验方法对比:validate 和validator      <form name="ask">
22在Struts中对用户输入信息的校验方法对比:validate 和validator         <field property="content" depends="required"/>
23在Struts中对用户输入信息的校验方法对比:validate 和validator      </form>
24在Struts中对用户输入信息的校验方法对比:validate 和validator   </formset>
25在Struts中对用户输入信息的校验方法对比:validate 和validator</form-validation>
26在Struts中对用户输入信息的校验方法对比:validate 和validator

具体格式可查阅官方文档,如上例,3到5行定义了需要对名为“loging”的FormBean的“username”、“password”分别进行“required”校验(即必填字段)。校验逻辑之间可以组合,如第6行的“required,codeinput”,定义了先进行required校验,通过了再进行codeinput校验。

与在validate方法内进行校验相比,使用Validator的优势就很明显了,可重用(从上述xml文件可以看出对很多字段都进行了required校验);可灵活配置、扩展,只需修改validation.xml文件就可以改变校验逻辑。 

上一篇:C语言基础样例


下一篇:JVM 内部运行线程介绍