這節介紹如何在SSH框架中使用Validator框架,Validator框架采用基于xml文件來配置驗證規則,它主要依賴兩個jar包:commons-validator-1.3.0.jar和oro-2.0.8.jar,要在SSH使用Validator框架,必須把這兩個jar包引用進來,其實Struts框架已包含這兩個jar包,所以我們不用再單獨引入了。
要在SSH框架中使用Validator,更確切的說是在Struts框架中使用,可以采用插件機制把Validator加入到框架,這需要修改原來的struts-config.xml文件,增加配置ValidatorPlugIn插件,代碼如下:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml" />
<set-property property="stopOnFirstError" value="true" />
</plug-in>
這樣當應用啟動時,Struts框架就會加載ValidatorPlugIn插件。
validator-rules.xml文件是Validator框架自帶的,它定義了一些常有的校驗規則,而validation.xml是我們自己定義的,它針對某個應用,內容如下:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
<formset>
<form name="registerForm">
<field property="register.username" depends="required">
<arg key="register.username" position="0"/>
</field>
<field property="register.password" depends="required,minlength">
<arg key="register.password" position="0"/>
<arg name="minlength" key="${var:minlength}" resource="false" position="1"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
<field property="register.email" depends="required,email">
<arg key="register.email" position="0"/>
</field>
</form>
</formset>
</form-validation>
# Errors
errors.header=<h3><fontcolor="red">ValidationError</font></h3>Youmustcorrectthefollowingerror(s)beforeproceeding:
errors.required={0}isrequired.
errors.minlength={0}cannotbelessthan{1}characters.
errors.email={0}isaninvalide-mailaddress.
這資源文件中{0}對應著<arg key="" position="0"/>,{1}對應著<arg key="" position="1"/>,以此類推,如果有驗證錯誤產生,將用key的值替換{n}
此外,我們還要修改struts-config.xml文件,修改內容見粗體:
//把原來的DynaActionForm 改為DynaValidatorForm
<form-beans>
<form-bean name="registerForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="register" type="test.register.entity.Register" />
</form-bean>
</form-beans>
//把原來的validate="false"改為validate="true"
<action-mappings>
<action name="registerForm" path="/register" scope="request"
type="test.register.action.RegisterAction" validate="true"
input="/register.jsp">
<forward name="success" path="/registerSuccess.jsp" />
</action>
</action-mappings>
修改錯誤顯示的樣式,我們在register.jsp中,替換原來<html/errors>為
<logic:messagesPresent>
<bean:message key="errors.header"/>
<ul>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</ul><hr />
</logic:messagesPresent>
注意在頁面上加入
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
這樣,我們運行程序,校驗失敗的效果如圖:
要在SSH框架中使用Validator,更確切的說是在Struts框架中使用,可以采用插件機制把Validator加入到框架,這需要修改原來的struts-config.xml文件,增加配置ValidatorPlugIn插件,代碼如下:





validator-rules.xml文件是Validator框架自帶的,它定義了一些常有的校驗規則,而validation.xml是我們自己定義的,它針對某個應用,內容如下:

























form元素的name屬性指定要進行驗證的表單,field元素的property屬性指定要驗證屬性,depends定義了驗證方式,在這里,我們定義了username屬性不能為空,password屬性不能為空,并且最小長度不能小于6,email屬性必須是合法的郵件地址。定義驗證方式之后,我們還必須修改資源文件registermessages.properties,增加以下內容:





此外,我們還要修改struts-config.xml文件,修改內容見粗體:















修改錯誤顯示的樣式,我們在register.jsp中,替換原來<html/errors>為








注意在頁面上加入

這樣,我們運行程序,校驗失敗的效果如圖:
