Validator框架如今成為Jakarta的公共項目的一部分,Struts攜帶了Validator框架,主要是兩個jar文件,jakarta-oto.jar和commons-validator.jar文件.前者提供了一組處理文本的類,具有文本替換過濾和分割等功能,后者提供了一個簡單的,可擴展的驗證框架,包含了通用的驗證方法和驗證規則.如果Struts使用Validator需要添加那兩個jar文件到lib目錄.Validator框架采用了兩個基于XML的配置文件來配置驗證規則,這兩個文件是validator-rules.xml和validation.在Struts應用中,它們放在WEB-INF目錄.
Validator-rules.xml文件包含了一組通用的驗證規則,對所有的String都適用.一般的情況下沒必要修改,除非需要修改或者擴展默認的規則.建議如果想擴展默認的驗證規則,最好把自定義的客戶化規則放在另一個XML文件中,這樣當升級Validator框架版本的時候,也無需修改validator-rules.xml文件.因為這個XML是不推薦修改的,所以我只是簡單的介紹一下具體的<validator>元素的幾個屬性,至于具體需要開發人員來開發的是validation的XML文件.<validator>元素的name屬性指定驗證規則的邏輯名,這個名字必須唯一.還有classname和method屬性分別指實現驗證規則邏輯的類和方法.msg屬性指定來自Resource中的消息key,驗證失敗,根據這個消息Key去找匹配的消息文本.depends屬性指定在調用當前驗證規則之前必須調用其他驗證規則.
Validation.xml文件是針對某個具體的Struts應用,需要開發人員來創建的,它可以為應用中的ActionForm配置所需要的驗證規則,取代ActionForm類中編程的方式來實現驗證.<form-validation>元素是validatin.xml文件的根元素,它包含兩個子元素<global>和<formset>,<global>可以出現零次或者多次,而<formset>元素可以出現一次或者多次他們的DTD定義是:<!element form-validation(global*,formset+)>.<global>元素可以定義<constant>子元素,它用來定義常量表達式,在文件中其余地方可以應用這些常量表達式.<formset>元素包含兩個子元素<constant>和<form>,<form>元素用于為表單配置驗證規則,它的name屬性指定了表單的名字.<form>包含一個或者多<field>子元素,用于配置表單中字段的驗證規則.<field>的<msg>子元素指定驗證規則對應的消息文本,該消息文本替代validator-rules.xml文件中為驗證規則配置的默認的消息文本.<msg>元素的主要屬性是:name指定驗證規則的名字,key當resource屬性為true的時候,key屬性指定的消息key該消息key應該在Resource Bundle中存在.key屬性直接指定消息文本.resource當此項為true的時候,表示使用來自ResourceBundle的消息.<field>元素還可以包括附加的子元素<arg0><arg1><arg2>用于替換符合消息中的參數.<field>元素元素還可以包含零個或者多個<var>元素,用來向驗證規則傳遞參數.
Validator插件需要在Struts配置文件中配置ValidatorPlugIn插件如下:
<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property
property=”pathnames”
value=”/WEB-INF/validator-rules.xml/WEB-INF/validation.xml”/>
</plug-in>
當應用啟動時,Struts框架會加載ValidatorPlugIn插件,并調用它的init()方法,根據pathnames屬性,加載相應的validator-rules.xml和validation.xml文件,把驗證信息讀入到內存中.
Validator框架不能用于驗證標準的org.apache.struts.atcion.ActionForm類,如果要使用Validator框架,應該采用ActionForm的兩個子類,validator包DynaValidatorForm和ValidatorForm類.DynaValidatorForm支持動態的ActionForm中使用Validator框架,ValidatorForm支持在標準的ActionForm中使用validator框架.無論是動態的還是標準的,它們的配置方法都一樣.而且Struts的一些標簽也可以和Validator框架協同工作,例如<html:errors>和<html:messages>Validator框架提供了對I18N的支持,無論是客戶端驗證,還是服務器驗證.Validator框架都從應用ResourceBundle中獲取錯誤信息.所以說它很好的支持的國際化.總結一下Struts應用中使用validator框架的步驟:
創建擴展ValidatorForm或者ValidatorActionForm類的ActionForm類,如果使用動態的ActionForm,則無需創建擴展DynaValidatorForm或者DynaBalidatorActionForm類的子類,可以直接進行.
在Struts配置文件中配置<form>和<action>元素.
把Validator框架使用的消息文本添加到應用的ResourceBundle中.
在Validation.xml文件中為表單配置驗證規則.
在Struts配置文件中配置ValidatorPlugIn插件.
如果更深入的學習Validator驗證框架,建議閱讀孫衛琴的<<精通Struts>>一書,本人
曾經從中受益匪淺,寫文章的很多啟發也來自該書.
posted on 2005-11-08 21:02
我心依舊 閱讀(1303)
評論(1) 編輯 收藏