在struts中使用Validator框架

 

struts中使用Validator框架

Validator驗證框架
Validatro框架以成爲Jakarta的公共項目的一部分,可以從http://jakarta.apache.org/commons/下載單獨的Validator框架,在Struts中已經呆了這個框架。
Validator主要依賴兩個jar包
Jakarta-oro.jar:-提供一組處理文本的類,具有文本替換、過濾、和分割功能。
Commons-validator.jar:提供了一個簡單、可擴展的驗證框架,包含了通用的驗證方法和驗證規則。

在用Struts中用這個框架,需加入這兩個包,用起來感覺還不錯。
下面介紹一下。
Validator採用基於兩個xml文件的方式來配置驗證規則,分別爲validation.xml,validator-rules.xml。在struts應用中,需放到web-inf目錄下。
1.validator-rules.xml
這個文件包含了一組驗證規則,對所有struts應用都適用。一般情況不用修改這個文件,除非要修改或擴展默認規則。如果要給應放到另一個xml文件中,而不是直接添加到validator-rules.xml文件中,這樣當Validator升級時,不用修改validator-rules.xml文件。
2.validator.xml文件
這個文件是針對於具體struts應用的,他可以爲應用中的ActionForm配置驗證規則。
而不用編碼實現驗證。
例如一個驗證登陸form的例子,要求用戶名必須填寫,祕密要求必填、最大、最小長度
及其內容的要求。

Java代碼
  1. <form-validation>  
  2.     <global>  
  3.         <!-- 密碼由數字、26個英文字母或者下劃線組成的字符串  -->  
  4.         <constant>  
  5.             <constant-name>pwd</constant-name>  
  6.             <onstant-value>^/w+$</onstant-value>  
  7.         </constant>  
  8.     </global>  
  9.     <formset>  
  10.         <form name="loginForm">  
  11.             <!-- 這裏的用戶名使用郵箱,驗證時使用正則表達式進行驗證 -->  
  12.             <field property="user.userId" depends="required">  
  13.                 <arg0 key="user.userId" />  
  14.             </field>  
  15.             <field property="user.userPwd" depends="required,minlength,maxlength,mask">  
  16.                 <!-- msg name="mask" key="errors.invalid" /-->  
  17.                 <arg0 key="user.userPwd" />  
  18.                 <arg1 name="minlength" key="${var:minlength}" resource="false" />  
  19.                 <arg2 name="maxlength" key="${var:maxlength}" resource="false" />  
  20.                 <var>  
  21.                     <var-name>mask</var-name>  
  22.                     <var-value>^/w+$</var-value>  
  23.                 </var>  
  24.                 <var>  
  25.                     <var-name>minlength</var-name>  
  26.                     <var-value>6</var-value>  
  27.                 </var>  
  28.                 <var>  
  29.                     <var-name>maxlength</var-name>  
  30.                     <var-value>20</var-value>  
  31.                 </var>  
  32.             </field>  
  33.         </form>  
  34.     </formset>  
  35. </form-validation>  
<form-validation>
	<global>
		<!-- 密碼由數字、26個英文字母或者下劃線組成的字符串  -->
		<constant>
			<constant-name>pwd</constant-name>
			<onstant-value>^/w+$</onstant-value>
		</constant>
	</global>
	<formset>
		<form name="loginForm">
			<!-- 這裏的用戶名使用郵箱,驗證時使用正則表達式進行驗證 -->
			<field property="user.userId" depends="required">
				<arg0 key="user.userId" />
			</field>
			<field property="user.userPwd" depends="required,minlength,maxlength,mask">
				<!-- msg name="mask" key="errors.invalid" /-->
				<arg0 key="user.userPwd" />
				<arg1 name="minlength" key="${var:minlength}" resource="false" />
				<arg2 name="maxlength" key="${var:maxlength}" resource="false" />
				<var>
					<var-name>mask</var-name>
					<var-value>^/w+$</var-value>
				</var>
				<var>
					<var-name>minlength</var-name>
					<var-value>6</var-value>
				</var>
				<var>
					<var-name>maxlength</var-name>
					<var-value>20</var-value>
				</var>
			</field>
		</form>
	</formset>
</form-validation>


validator.xml和validator-rules.xml文件的語法不在這裏說明。

3.Validator插件
爲了在struts中用validator,可以用插件方式加載Validator框架,
需在struts配置文件中配置ValidatorPlugIn插件,同時寫明兩個xml文件的路徑。
應用啓動時,Strust會加載這個插件,並調用他的init()方法,init()方法根據pathnames加載相應的validator-xml,validator.xml文件,把驗證信息讀入到內存中。

Java代碼
  1. <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  2.         <set-property    value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"  
  3.             property="pathnames" />  
  4.     </plug-in>  
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
		<set-property	value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
			property="pathnames" />
	</plug-in>


4.Validator和ActionForm
Validator框架不能直接org.apache.struts.action.ActionForm。應採用ActionForm的兩個子類
ValidatorActionForm和ValidatorForm
DynaValidatorActionFrom繼續自DynaValidatorForm
支持動態在ActionFrom中使用Validator框架
ValidatorFormActionForm繼承ValidatorForm
支持在標準ActionForm中使用Validator框架。

DynaValidtaorForom和ValidatorForm類都實現了validator()方法,如果驗證失敗,就會返回包含錯誤消息 的ActionMessage對象,並把該對象添加到ActionErrors集合對象中,由validator方法最後返回ActionErrors對 象。
ValidatorForm有一個子類ValidatorActionForm
ValidatorForm
Strust配置文件的<action>元素的name屬------>validator.xml文件<form>元素的name屬性
ValidatorActionForm
Strust配置文件的<action>元素的path屬------>validator.xml文件<form>元素的name屬性
Validator框架提供這兩個類目的在於可以更加精確的控制執行驗證的條件。
例如
loginForm表單對應兩個驗證規則A、B。對應login、cancel兩個動作。
如果對於這兩個動作都要執行規則A、B。則可以擴展一個ValidatorFom類loginForm
然後配置

Java代碼
  1. <formset>  
  2. <form name=”loginForm”>  
  3.     驗證規則A  
  4.     驗證規則B  
  5. .</form>  
  6. ….  
  7. </formset>  
<formset>
<form name=”loginForm”>
	驗證規則A
	驗證規則B
.</form>
….
</formset>


如果對於用戶的login動作,執行規則A。對於cancel動作執行B規則。則可以擴展一個ValidatorActionFom類loginForm
然後配置

Java代碼
  1. <formset>  
  2. <form name=”login”>  
  3.     驗證規則A  
  4. .</form>  
  5. <form name=”cancel”>  
  6.     驗證規則B  
  7. .</form>   
  8. </formset>  
<formset>
<form name=”login”>
	驗證規則A
.</form>
<form name=”cancel”>
	驗證規則B
.</form> 
</formset>


而DynaValidatorForm和DynaValidatorActionForm,區別和ValidatorFrom和ValidatorActionForm的區別一樣

5.在validator框架中使用JavaScript
默認情況下,validator框架在服務器端執行表單驗證。也可以在客戶端驗證。
如果在客戶端驗證,需要使用struts的<html:javascript>標籤,他能在jsp頁面中生成用於客戶端驗證的JavaScript的腳本。
1) 在validator-rules.xml文件的<validator>元素中配置<javascript>元素
默認struts框架的validator-rules.xml文件已經包含了javascript子元素。
也可以將這些javascript集中放到一個validator.js的文件中,也頁面中引入

Java代碼
  1. <script language="Javascript1.1" src="js/validator.js"></script>  
<script language="Javascript1.1" src="js/validator.js"></script>


2) 在Jsp頁面中包含<html:javascript>
<html:javascript formName=”loginForm”> 這個標籤的form的name屬性制定需要驗證的表單名字,他能夠訪問爲表單配置的驗證規則的javascript元素,把包含的腳本寫到jsp頁面中
,生成validateLoginForm的函數,負責執行驗證邏輯
3) 對需要驗證的表單定義onsubmit事件
4)

Java代碼
  1. <html:form action="manageContract.do" onsubmit="return validateContractForm(this);">  
<html:form action="manageContract.do" onsubmit="return validateContractForm(this);">


5) 用戶在表單上提交後,就會調用<html:javascript>
標籤生成的js腳本validateLoginForm函數,執行驗證。如果驗證失敗,就會彈出對話框提示,不會提交的服務器端。

小結
使用步驟
1) 創建擴展ValidatorForm或ValidatorActionForm類的ActionForm,如果使用動態ActionForm,則不用擴展 DynaValidatorForm或DynaValidatorActionForm類的子類,可以直接進行第二步
2) 在struts文件中配置form和action元素
3) 把validator框架使用的文本信息添加到應用的Resource Bundle中
4)

Java代碼
  1. <message-resources parameter="com.web.ApplicationResources" />  
<message-resources parameter="com.web.ApplicationResources" />


5) 在validatorxml文件中爲表單配置驗證規則
6) 在struts配置文件中配置validatorPlugIn插件

Java代碼
  1. <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  2.     <set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" property="pathnames" />    </plug-in> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章