validator驗證框架之理解

wl1121發表於2007-10-30
看了別人寫的那麼多文章,自己也手癢癢,所以決定也寫一點.談談最近學struts遇到的驗證框架.

驗證框架的使用需要實現這幾步:

1.導包 當然這在struts中已經帶上了

2.編寫Actionfrom類 注意 這裡不是繼承ActionForm 而是繼承ValidatorForm或ValidatorActionForm
其中的Validate方法要去掉 因為在ValidatorForm或ValidatorActionForm 中已經實現了這個方法

3. 在struts-config中配置Form 和 action

4.在Validate.xml中配置驗證欄位

5.寫資源包

下面我就說說其中的具體實現:
一.Validator主要依賴兩個jar包

Jakarta-oro.jar:-提供一組處理文字的類,具有文字替換、過濾、和分割功能。
Commons-validator.jar:提供了一個簡單、可擴充套件的驗證框架,包含了通用的驗證方法和驗證規則。

二.validation.xml,validator-rules.xml

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外掛
為了在struts中用validator,可以用外掛方式載入Validator框架,
需在struts配置檔案中配置ValidatorPlugIn外掛,同時寫明兩個xml檔案的路徑。
應用啟動時,Strust會載入這個外掛,並呼叫他的init()方法,init()
方法根據pathnames載入相應的validator-xml,validator.xml檔案,把驗證資訊讀入到記憶體中。
程式碼:(一般的IDE工具能自動生成)
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
property="pathnames" />
</plug-in>
四.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 (用在同一個form在修改和註冊模組中驗證相同的屬性)
Strust配置檔案的<action>元素的name屬------>validator.xml檔案<form>元素的name屬性
例如:
<action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="request" type="validatetest.action.LoginAction" />
<formset>
<form name="loginActionForm">
<field property="userName" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>

ValidatorActionForm(用在註冊和登入模組使用同一個form但是驗證的屬性有多有少 不一樣的情況)
Strust配置檔案的<action>元素的path屬------>validator.xml檔案<form>元素的name屬性
例如:
<action input="/login.jsp" name="loginActionForm" path="/userAction1" scope="request" type="validatetest.action.LoginAction" />
<action input="/login.jsp" name="loginActionForm" path="/userAction2" scope="request" type="validatetest.action.LoginAction" />
用的同一個Form 但是驗證的屬性不同(注意path中的"/"一定要帶著)
<formset>
<form name="/userAction1">
<field property="user.userName" depends="required">
<arg key="error.username"/>
</field>
</form>
<form name="/userAction2">
<field property="user.userPwd" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>
Validator框架提供這兩個類目的在於可以更加精確的控制執行驗證的條件。


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

在validator框架中使用JavaScript
需要在驗證的頁面中加入<html:javascript formName="/userAction1"/>注意formName是validator.xml中的<form name="/userAction1">

對需要驗證的表單定義onsubmit事件 return方法 為 validate+form名 可以在jsp頁面中檢視原始碼獲得
<html:form action="userAction1" method="post" onsubmit="return validateUserForm(this)">

五 把需要驗證的內容寫到 資源包中
如:
error.user=username is required
error.pwd=userPwd is required
error.username=userName
error.password=password
error.age=age

以下直接從validator-rules.xml檔案中拷過來
# 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.

相關文章