本文接(Struts)動態ActionForm寫驗證架構!
Struts1.1及以上版本在提供了DynaActionForm的同時,配合資料驗證的需要,還提供了表單輸入自動驗證的功能,即使用Validator驗證架構。
在使用Validator驗證架構時,需要用到二個基於XML的設定檔進行驗證規則的配置,一個是validator-rules.xml,另一個是validation.xml。這兩個檔案應該部署在相應的WEB應用中的WEB-INF檔案夾下。此外validator還應在struts-config.xml中進行配置。
在Struts-config.xml中配置Validator
Validator架構是作為一個Struts外掛程式配置到Struts應用中的,即Struts擴充中的PlugIn機制。通過在Struts設定檔中配置Validator外掛程式,Struts應用在啟動的時候就能夠知道Validator架構正在被使用,載入並初始化Validator架構。
以下為樣本:
<!-- 驗證外掛程式 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
<set-property property="stopOnFirstError" value="false" />
</plug-in>
stopOnFirstError屬性的作用是指定用戶端JS驗證時是在遇見第一個時就返回還是全部處理完後將所有錯誤全部返回。
validation.xml的配置
validation.xml檔案是Validator架構需要的另一個設定檔。該檔案是特定於應用程式的,由開發人員自己來建立。它描述了那些具體應用中的ActionForm所使用的validator-rules.xml檔案中的有效性驗證規則。通過ActionForm在validation.xml檔案中配置所需要的驗證規則,開發人員就不必將 驗證的邏輯寫入程式碼ctionForm的內部。一個簡單的validation.xml檔案代碼如下:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<!-- global元素允許開發人員配置可以用在其他部分中的constant元素,也就是全域常量
formset也可以有contant元素,定義局部常量-->
<global>
<constant>
<constant-name>zip</constant-name>
<constant-value>^[a-zA-Z]*$</constant-value>
</constant>
</global>
<formset>
<!-- struts-config formBean中的name屬性 -->
<form name="dynaFormForm">
<!-- 視圖組件中要驗證的屬性 驗證規則 在validator-rules.xml中定義-->
<field property="userName" depends="required,minlength,maxlength">
<arg key="lable.userName" position="0"/><!-- 在資源檔中定義 -->
<!-- 在本檔案中設定最小值 false表明可在本檔案中直接定義值-->
<arg key="${var:minlength}" resource="false" position="1"/>
<var> <!-- 在arg中訪問 var的形式 ${var:minlength}-->
<var-name>minlength</var-name>
<var-value>3</var-value>
<!-- var元素用來向驗證規則傳遞參數 -->
</var>
<!-- 在資源檔中設定最大值 -->
<arg key="lable.userName.maxlength" resource="true" position="2"/>
</field>
<field property="userPwd" depends="required,mask">
<!-- field元素的msg子項目指定驗證規則對應的訊息文本,該訊息文本將 替代預設的訊息文本,
即validatior-rules.xml中定義的訊息文本。msg元素的值必須是應用程式訊息資源套件中某個訊息資源的關鍵字。 -->
<msg name="mask" key="registerForm.password.maskmsg"/>
<!-- arg元素可以來向訊息文本傳遞參數。 -->
<arg key="lable.userPwd" />
<arg key="lable.mask" resource="true" position="1"/>
<!--
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z]*$</var-value>
或者用${zip}代碼value內容
</var>-->
</field>
</form>
對應的資源檔如下:lable.userName=使用者名稱
lable.userName.maxlength=5
lable.userPwd=密碼
lable.mask=^[a-zA-Z]*$
registerForm.password.maskmsg=測試訊息
validation.xml中已經加了大量注釋。
而針對上例子的Struts-config.xml設定檔中的DynaActionForm配置如下: <!-- 動態FORM示範 -->
<form-bean name="dynaFormForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="userName" type="java.lang.String" />
<form-property name="userPwd" type="java.lang.String" />
</form-bean>
注意,要使用驗證架構的FormBean必須是與Validator匹配的類:ValidationForm類或DynaValidationForm類,及其子類ValidatiorActionForm和DynaValidatiorActionForm。它們都是ActionForm類的子類。
我這裡用的是動態FormBean,因此類型我由org.apache.struts.action.DynaActionForm改為org.apache.struts.validator.DynaValidatorForm,如果要驗證普通的非動態ActionForm如下:
<!-- 驗證架構要用在非動態FormBean上時,該FormBean必須為ValidatorForm子類 -->
<form-bean name="studentForm" type="struts.form.StudentForm" />
我們就應該讓StudentForm類繼承自ValidationForm,否則達不到驗證效果!
到這裡Struts的筆記基本已經寫完,還有標記沒有寫,我想標記在執行個體中去寫比較好!我會在以後的筆記中繼續!