1 Validation-rule中的子元素<validator>中对应的属性有name,classname,method,methodparams ,msg,depends,jsfunctionname
其中msg属性对应resource bundle中的消息key在<validator></validator>中的属性msg的值为 msg=”errors.required” 所以在resource bundle中必须有key为error.required的键值对
Error.required={0} is required
在validation-rule.xml文件中使用一下的默认消息文本
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
应该把以上内容添加到对应的消息文件中,在校验出错时可以在消息文件中根据msg属性对应的key在消息文件中找到对应的value,如果不打算使用默认的消息文件可以修改validator属性中的msg使其引用其他自定义的消息key,或者可以修改以上的错误消息文本,如果想让错误消息显示为中文则在消息文件中将错误消息全部替换为中文然后转码为对应的u编码即可显示中文
2 depends=”mask”调用的是validateMask()方法用于验证字段值是否和一个给定的正则表达式相互匹配mask验证规则的msg属性为errors.invalid对应到消息文件中的key获得相应的value 验证失败是创建包含错误的actionmessage对象添加到actionmessages集合对象中
3
Validation.xml文件如下
<form-validation>
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\d{8}\d*$</constant-value>
</constant>
</global>
<formset>
<form name="checkoutForm">
<field
property="phone"
depends="required,mask,minlength"
>
<arg0 key="label.phone"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
</field>
</form>
<form name="loginActionForm">
<field property="userName" depends="required">
<arg0 key="insert.error.name"/>
</field>
<field property="password" depends="minlength">
<arg0 key="insert.error.pass"/>
<arg1 name="minlength" key="${var:min}" resource="false"/>
<var>
<var-name>min</var-name>
<var-value>6</var-value>
</var>
<arg1 name="maxlength" key="${var:max}" resource="false"/>
<var>
<var-name>max</var-name>
<var-value>20</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
<global>标签定义全局常量phone 其值为一正则表达式形式 在<field>标签中包含的参数args0,1,2,3分别指定验证规则所对应的消息文件中的错误消息对应的参数 如果不指定name值说明应用到所以的验证规则 args元素的resource属性为false时表明不使用消息资源文件,而使用该文件中自定义的变量的值
对mask验证的错误信息是errors.invalid={0} is invalid.在消息文件中不需要再添加参数args1 但是需要给validateMask()函数传递参数mask确定匹配的正则表达式 所以在使用mask校验时一定要添加mask参数和值<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
引用全局变量phone的正则表达式的值引用形式为${var_name}正则校验。
<field>中也可以包含<msg>属性替代在validation-rule.xml文件中为验证规则配置的默认的消息文本
<msg name=”mask” key=”phone.invalidformat” resource=”true”/>
当校验出错时错误消息来自于消息文件中的key为phone.invalidform的value的内容
<args>有三个参数 name,key,resource name指定校验规则 key指定消息文件中对应的key值 resource指定是否从消息资源文件中获取数据。Args可以访问var元素的值形式为
${var:var_name}获得变量的值类似于获得全局常量的值${phone}
3一定要在配置文件中添加插件部分
<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是固定的不可改变根据路径名找到对应的.xml配置文件读入内存。
Validtor框架对应的actionform为validatorForm或DynavalidatorFrom他们都实现了validate()方法所以不用覆盖此方法
对应不同action同一表单元素采用不同的校验规则,此时actionform必须继承validatorActionForm struts中的action元素的path属性对应validation.xml文件中form元素的name属性
如果多个action要对同一个表单元素执行多个验证规则配置如下
<formset>
<form name=”editForm”>
验证规则1<file property=”username” depends=”required,mask”>
<arg0 key=””user.username>
<var>
<var_name>mask</var_name>
<var_value>${username}</var_value>
</var>
</file>
验证规则2
</form>
</formset>
此时actionform类可以继承validatorform
如果保存动作执行规则1,取消执行规则2 则要继承validatoractionform
其中validation.xml文件配置如下:
<formset>
<from name=”/save”>
验证规则1<field property=”username” depends=”required”>
<arg0 key=”user.username”/>
</field>
</form>
<form name=”/cancel”>
验证规则2<field>
<var>
<var_name>mask</var_name>
<var_value>${username}</var_value>
</var>
</field>
</form
</formset>
最后使用<html:errors property=”username/>捕获对应表单元素的校验错误信息。
Requestprocessor调用validate()方法进行表单校验把返回的actionerrors对象保存在request范围中<html:errors><html:messages>标签可以访问request范围内的ActionMessages对象或其子类AtionErrors对象。