要使用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验证规则严整表单的格式时,你只需要在一处定义这个格式的正则表达式。
评论