<form-validation>
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$</constant-value>
</constant>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{5}\d*$</constant-value>
</constant>
</global>
<formset>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{5}(-\d{4})?$</constant-value>
</constant>
<form name="registrationForm">
<field property="firstName"
depends="required,mask,minlength">
<arg0 key="registrationForm.firstname.displayname"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<var>
<var-name>mask</var-name>
<var-value>^\w+$</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
</field>
..........
相信大家仔細一看就明白了,首先,可以定義一些用正則表達式表示的規則,這些規則還分全局和局部。
這樣就可以DIY一些可以用正則表達式表示的規則了,例如下面就具體用到了自定義的規則:phone。
...
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$</constant-value>
</constant>
</global>
...
<field property="mobile"
depends="mask">
<arg0 key="registrationForm.mobile.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
</field>
...
這下也明白mask的作用了,原來它是專門用于自定義規則!
然后就可以添加需要加validation的field了,格式如下:
<formset>
<form name="registrationForm">
<field property="firstName"
depends="required,mask,minlength">
<arg0 key="registrationForm.firstname.displayname"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<var>
<var-name>mask</var-name>
<var-value>^\w+$</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
</field>
</form>
</formset>
3 將需要加validation的formbean全部改成 extends ValidatorForm
4 在struts-config.xml文件中加入一段代碼<plug-in></plug-in>,位置如下:
......
<action name="performanceSearchForm" path="/performanceRptAction" scope="request" type="com.hp.elog2.action.report.PerformanceRptAction">
<forward name="success" path="/FinalRpt.jsp" redirect="false" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
</struts-config>
5 在ApplicationResources.properties文件中加入如下內容:
# Errors
errors.header=Validation Error
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 an byte.
errors.short={0} must be an short.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.float={0} must be an float.
errors.double={0} must be an double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
且注意在修改validation.xml時,如
<arg0 key="registrationForm.firstname.displayname"/>
則ApplicationResources.properties中要有對應的 registrationForm.firstname.displayname 值。
這就可以實現出錯信息本地化。
6 修改要加validation的jsp文件。兩處:
1 在頁面的form標簽中加入onsubmit事件
<html:form action="registration" onsubmit="return validateRegistrationForm(this);">
2 在</body>之前加入一段代碼,內容如下:
<html:javascript formName="registrationForm"/>
這段代碼會自動生成上面的validateRegistrationForm(this)函數