Struts 內建的靜態驗證框架(Validator)能在伺服器端自動檢查表單資料的類型、必填、格式等規則,減少手寫驗證程式碼。本文逐步說明從啟用插件到定義規則的完整流程。
在 struts-config.xml 中加入:
<message-resources parameter="ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
parameter="ApplicationResources" 指向類路徑下的 ApplicationResources.properties;為支援中文錯誤訊息,需另備 ApplicationResources_zh_CN.properties,兩者皆打包至 WEB-INF/classes。
使用開發工具將 validator-rules.xml(內建驗證規則)與 validation.xml(自訂驗證內容)放入 WEB-INF/ 目錄。
在 ApplicationResources.properties 中設定:
errors.integer={0} 必須為整數值,請勿輸入空白字元。
errors.date={0} 日期格式錯誤,應為 2004-03-23 或 2004-03-23 00:00:00.0
# 表單 form1 的欄位顯示名稱
form1.name.displayname=姓名
form1.height.displayname=身高
form1.born.displayname=出生日期
為使中文正確顯示,建議以 native2ascii 轉碼:
native2ascii ApplicationResources.properties ApplicationResources_zh_CN.properties
在 <formset> 區塊中為每個 ActionForm 定義驗證:
<form name="form1">
<field property="name" depends="required">
<msg name="required" key="errors.required"/>
</field>
<field property="height" depends="required,integer">
<msg name="integer" key="errors.integer"/>
</field>
<field property="born" depends="required,date">
<msg name="date" key="errors.date"/>
<var>
<var-name>datePattern</var-name>
<var-value>yyyy-MM-dd</var-value>
</var>
</field>
</form>
depends 可串接多個內建規則(required、integer、date、email、mask 等)。
表單類別需繼承 ValidatorForm 或實作 Validateable 介面,Struts 會在 validate() 階段自動觸發驗證。
靜態驗證將規則外部化至 XML,達成「設定大於程式碼」的目標,維護性極佳。搭配國際化資源檔,即可支援多語系專案。