在使用 ActionForm 時,我們將表單資料的一些驗證工作放在validate()方法中,雖然這是一個可行的方法,然而在ActionForm中撰寫特定的驗證邏輯會降低 ActionForm的重用性,並產生維護上的麻煩,如果要改變驗證邏輯,就必須修改原始程式並重新編譯。
另一方面,驗證工作可以分作客戶端與伺服端的工作,客戶端可以使用JavaScript作一些基本的欄位驗證,像是是否填寫所有的欄位,欄位格式是否正確 等等,而為了避免客戶端直接跳過頁面直接請求,伺服端也必須作驗證的工作,客戶端與伺服端的驗證工作可以互相合作。
Jakarta Commons Validator 框架可以將驗證邏輯移至ActionForm之外,輔助Struts開發人員使用或自訂客戶端與伺服端的驗證工作。Validator與Struts包裝在一起,要在Struts中使用Validator框架,必須有commons-validator.jar與 jakarta-oro.jar兩個類別庫檔案,請將它們複制到應用程式的WEB-INF/lib目錄下,而Struts的其它類別庫檔案commons -beanutils.jar、commons-logging.jar、commons-collections.jar、commons- digester.jar也是必須的,請確定它們都在/WEB-INF/lib目錄之下。
Validator的XML設定可以從struts-blank.war中取得,請將validation.xml與validator- rules.xml兩個設定檔案複製至/WEB-INF的目錄下,您也可以設一個專門用來管理設定檔案的目錄。
Validator是以 Plugin 介面 的方式來擴充ActionServlet的功能,所以您必須在struts-config.xml中告訴ActionServlet使用這個 plugin:
...
<plug-in
className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
...
pathname設定了validation.xml與validator-rules.xml設定檔的位置,ActionServlet初始時,會一併 初始Validator框架,載入相關的驗證器與驗證規則。
Validator框架包使用Struts預設的訊息資源包,建議您複製struts-blank中的 application.properties至WEB-INF/classes/resources/中,這個訊息資源包中有一些Validator所 預設使用的key-value對應設定。
在下載的Struts檔案中,webapps目錄下有一個 struts-validator.war,當中包括一些Validator框架的使用範例,您可以將之複製至Servlet Container的webapps下,啟動之後會自動解壓縮並完成部署,您可以先看看當中所實作的驗證功能。