struts 内置了 validator 通过配置xml文件来对前端验证进行处理
支持的struts包名 jakarta-oro.jar 和 commons-validator.jar
1.配置validator机制
a.定义ActionForm
struts-config.xml文件
<form-bean name="regForm" type="org.apache.struts.validator.DynaValidatorForm">
将type = "org.apache.struts.action.ActionForm" 改成
type="org.apache.struts.validator.ValidatorForm"
将type = "org.apache.struts.action.DynaActionForm" 改成type="org.apache.struts.validator.DynaValidatorForm"
因为 只有 ValidatorForm 和DynaValidatorForm 可以使用 valitor验证机制。
如果用的是ActionForm 或者 DynaActionForm 需要 继承 ValidatorForm 或者 DynaValidatorForm
因为 ValidatorForm是ActionForm的子类,DynaValidatorForm是DynaActionForm的子类。
<form-bean name="loginForm" type="prj10_1.form.LoginForm" >
<form-property name="account" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
</form-bean>
特别注意:如果继承 ValidatorForm 或者 DynaValidatorForm 时,应当删除 validate()和reset()方法,否则也不能显示。
b.注册验证文件
<!-- 以插件的形式注册框架中的验证文件 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" property="pathnames"/>
</plug-in>
2.编写xml验证文件 文件名 validator.xml
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<!-- 在这里写验证 -->
<form-validation>
<!-- 写表单验证可以写多个 -->
<formset>
<!-- 验证某个表单,name是ActionForm名字 -->
<form name="regForm">
<!-- 验证属性 -->
<field property="name" depends="required">
<msg name="required" key="error.null"/>
<arg0 name="required" key="name" resource="false"/>
</field>
</form>
</formset>
valicator-rules.xml是验证的帮助文件 不需要编写
文档说明
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<!--
在配置文件 struts-config.xml 以插件的形式注册validator机制
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
ApplicationResources.properties 文件中定义错误消息
# Struts Validator Error Messages
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.
Note: Starting in Struts 1.2.0 the default javascript definitions have
been consolidated to commons-validator. The default can be overridden
by supplying a <javascript> element with a CDATA section, just as
in struts 1.1.
-->
<form-validation>
<global>
<!-- 验证是否为空 -->
<validator name="required" .../>
<!-- 在某种条件下不为空 -->
<validator name="requiredif".../>
<!-- 在某种条件下进行验证 -->
<validator name="validwhen".../>
<!-- 验证最小长度 -->
<validator name="minlength".../>
<!-- 验证最大长度 -->
<validator name="maxlength".../>
<!-- 正则表达式 -->
<validator name="mask".../>
<!-- 验证是否是字节 -->
<validator name="byte".../>
<!-- 验证是否是短整型 -->
<validator name="short".../>
<!-- 验证是否是整型 -->
<validator name="integer".../>
<!-- 验证是否是长整型 -->
<validator name="long".../>
<!-- 验证是否是浮点型 -->
<validator name="float".../>
<!-- 验证是否是双精度型 -->
<validator name="double".../>
<!-- 验证是否是日期格式 -->
<validator name="date".../>
<!-- 整数的范围 -->
<validator name="intRange".../>
<!-- 浮点型的范围 -->
<validator name="floatRange".../>
<!-- 双精度型的范围 -->
<validator name="doubleRange".../>
<!-- 验证是否是信用卡的格式 -->
<validator name="creditCard".../>
<!-- 是否是电子邮件格式 -->
<validator name="email".../>
<!-- 是否是url格式 -->
<validator name="url".../>
<!--
This simply allows struts to include the validateUtilities into a page, it should
not be used as a validation rule.
-->
<validator name="includeJavaScriptUtilities"
classname=""
method=""
methodParams=""
depends=""
msg=""
jsFunction="org.apache.commons.validator.javascript.validateUtilities"/>
</global>
</form-validation>