要使用Validator验证框架,首先必须在struts-config.xml中指定plug-in元素。 <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> pathnames指定你要使用的Validator配置文件。可以设置一个或多个。第一个validator-rules.xml定义 各个验证规则,第二个validation.xml定义了验证框架如何应用到你的应用程序中去。 一个好的方法是为应用程序的每个功能模块定义一个validation.xml。一个大型的应用程序可能有一大堆这样的文件 要使用验证框架的form bean ,如果是硬编码的formbean则必须继承org.apache.struts.action.ValidatorForm。如果是动态formbean则必须是org.apache.struts.action.DynaValidatorForm或它的字类。 下面一个实例验证MyLoginForm表单的username和password字段是否为空,并限制password的最大值和最小值 <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <formset> <form name="MyLoginForm"> <field property="username" depends="required"> <arg key="prompt.username"/> </field> <field property="password" depends="required, minlength,maxlength"> <arg key="prompt.password"/> <arg key="${var:minlength}" name="minlength" resource="false"/> <arg key="${var:maxlength}" name="maxlength" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>16</var-value> </var> <var> <var-name>minlength</var-name> <var-value>3</var-value> </var> </field> </form> <formset> <form-validation> form 元素中的name属性指定要验证的表单名而不是类。 如果formbean的类型为ValidatorActionForm 或 DynaValidatorActionForm,则验证就和请求路径关联而不是formbean。当一个表单被提交到一个Action时,只有与路径对应的验证起作用。举例如下: <form name="/ProcessStep1"> <field property="username" depends="required"> <arg key="prompt.username"/> </field> </form> <form name="/ProcessStep2> <field property="password" depends="required"> <arg key="prompt.password"/> </field> </form> 只有当struts-config.xml的action元素的validate属性为true时才进行验证(validate默认值为true)。如果验证失败则Struts跳转到由action元素的input属性指定的位置。 <action path="/Login" type="com.oreilly.strutsckbk.ch08.LoginAction" scope="request" name="MyLoginForm" validate="true" input="/login.jsp"> <forward name="success" path="/login_success.jsp"/> </action> n 在validation.xml中定义常量。 常量有两种:一种是全局范围常量。一种是某个formset范围的常量。位置如下: form-bean à form-validation à global à constant form-bean à form-validation à formset à constant 格式如下: <form-validation> <global> <constant> <constant-name>globalVarName</constant-name> <constant-value>globalVarValue</constant-value> </constant> </global> <formset> <constant> <constant-name>formsetVarName</constant-name> <constant-value>formsetVarValue</constant-value> </constant> <form name="MyForm"> <field property="myfield" depends="someRule,anotherRule"> <var> <var-name>someRule</var-name> <var-value>${globalVarName}</var-value> </var> <var> <var-name>anotherRule</var-name> <var-value>${formsetVarName}</var-value> </var> </field> </form> <formset> <form-validation> 如果你有多个field元素要用到同一个值,则可以定义一个这个值的常量,这样就可以应用这个常量了 如果这个常量作用于整个应用程序则生命为global范围的常量。如果这个常量只作用于某个特定的form且被重复使用,则的定义它为formset 范围的常量。举例如下: <form-validation> <global> <constant> <constant-name>usernameMinLength</constant-name> <constant-value>7</constant-value> </constant> </global> <formset> <constant> <constant-name>nameMaxLength</constant-name> <constant-value>40</constant-value> </constant> <form name="RegistrationForm"> <field property="username" depends="required,minlength"> <arg key="prompt.username"/> <arg key="${var:minlength}" name="minlength" resource="false"/> <var> <var-name>minlength</var-name> <var-value>${usernameMinLength}</var-value> </var> </field> <field property="firstName" depends="required,maxlength"> <arg key="prompt.firstName"/> <arg key="${var:maxlength}" name="maxlength" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>${nameMaxLength}</var-value> </var> </field> <field property="lastName" depends="required,minlength,maxlength"> <arg key="prompt.lastName"/> <arg key="${var:minlength}" name="minlength" resource="false"/> <arg key="${var:maxlength}" name="maxlength" resource="false"/> <var> <var-name>minlength</var-name> <var-value>2</var-value> </var> <var> <var-name>maxlength</var-name> <var-value>${nameMaxLength}</var-value> </var> </field> </form> <formset> <formset-validation> 如果你使用mask验证规则严整表单的格式时,你只需要在一处定义这个格式的正则表达式。

评论