程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Struts中使用Validator驗證框架詳解

在Struts中使用Validator驗證框架詳解

編輯:關於JAVA

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的例子,要求用戶名必須填寫,秘密要求必填、最大、最小長度及其內容的要求。

代碼

<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文件,把驗證信息讀入到內存中。

代碼

<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配置文件的元素的name屬------>validator.xml文件 元素的name屬性

ValidatorActionForm

Strust配置文件的元素的path屬------>validator.xml文件元素的name屬性

Validator框架提供這兩個類目的在於可以更加精確的控制執行驗證的條件。

例如

loginForm表單對應兩個驗證規則A、B。對應login、cancel兩個動作。

如果對於這兩個動作都要執行規則A、B。則可以擴展一個ValidatorFom類loginForm然後配置

代碼

<formset>
<form name=”loginForm”>
   驗證規則A
   驗證規則B
.</form>
….
</formset>

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

loginForm

然後配置

代碼

<formset>
<form name=”login”>
   驗證規則A
.</form>
<form name=”cancel”>
   驗證規則B
.</form>
</formset>

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

5.在validator框架中使用JavaScript

默認情況下,validator框架在服務器端執行表單驗證。也可以在客戶端驗證。

如果在客戶端驗證,需要使用struts的標簽,他能在jsp頁面中生成用於客戶端驗證

的JavaScript的腳本。

1)在validator-rules.xml文件的元素中配置元素默認struts框架的validator-rules.xml文件已經包含了javascript子元素。也可以將這些javascript集中放到一個validator.js的文件中,也頁面中引入代碼

< 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)代碼

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

5)用戶在表單上提交後,就會調用

標簽生成的js腳本validateLoginForm函數,執行驗證。如果驗證失敗,就會彈出對話框提示,

不會提交的服務器端。

小結

使用步驟

1)創建擴展ValidatorForm或ValidatorActionForm類的ActionForm,如果使用動態ActionForm,

則不用擴展DynaValidatorForm或DynaValidatorActionForm類的子類,可以直接進行第二步

2)在struts文件中配置form和action元素

3)把validator框架使用的文本信息添加到應用的Resource Bundle中

4)代碼

< message-resources parameter="com.web.ApplicationResources" />

5)在validatorxml文件中為表單配置驗證規則

6)在struts配置文件中配置validatorPlugIn插件

代碼

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" property="pathnames"/>
</plug-in>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved