Struts Validator 框架提供聲明式表單驗證,支援伺服端與客戶端(JavaScript)雙模式。本文詳細說明啟用步驟、兩大配置文件(validator-rules.xml、validation.xml)、14 種內建驗證器用法、FormBean 撰寫規則、struts-config.xml 配置,以及 JSP 頁面錯誤訊息顯示技巧。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
或在 JBuilder 專案屬性勾選 Struts Validation 節點自動生成。
定義每個驗證器的邏輯類別、JavaScript 代碼、錯誤訊息鍵值。Struts 內建 14 種:
可自行開發自訂驗證器(如密碼一致性)。
<form-validation>
<formset>
<form name="logonForm"> <!-- 對應 struts-config.xml form-bean name -->
<field property="username" depends="required,minlength">
<msg name="required" key="errors.required"/>
<msg name="minlength" key="errors.minlength"/>
<arg0 key="prompt.username"/> <!-- {0} -->
<arg1 name="minlength" key="${var:minlength}" resource="false"/> <!-- {1} -->
<var><var-name>minlength</var-name><var-value>6</var-value></var>
</field>
<field property="password" depends="required,mask">
<msg name="mask" key="errors.invalid"/>
<arg0 key="prompt.password"/>
<var><var-name>mask</var-name><var-value>^[a-zA-Z0-9]{6,12}$</var-value></var>
</field>
<field property="confirmPassword" depends="required">
<msg name="required" key="errors.required"/>
<arg0 key="prompt.confirmPassword"/>
</field>
</form>
</formset>
</form-validation>
<form name="...">:對應 struts-config.xml 中 <form-bean name="...">。<field property="..." depends="v1,v2">:欄位名稱、依賴驗證器(逗號分隔)。<msg name="validator" key="..."/>:驗證失敗訊息鍵(對應 ApplicationResources.properties)。<arg0>、<arg1>:訊息參數 {0}、{1},resource="false" 表示直接取值而非資源鍵。<var>:驗證器參數(如 minlength、mask、min/max)。| 驗證器 | depends 值 | 必要參數 | 範例 |
|---|---|---|---|
| Required | required | - | <field property="email" depends="required">... |
| Mask | mask | mask (regex) | <var><var-name>mask</var-name><var-value>^\d+$</var-value></var> |
| Range | range | min, max | <var><var-name>min</var-name><var-value>1</var-value></var> <var><var-name>max</var-name><var-value>100</var-value></var> |
| MaxLength | maxlength | maxlength | <var><var-name>maxlength</var-name><var-value>20</var-value></var> |
| MinLength | minlength | minlength | 同上 |
| - | <field property="email" depends="required,email">... |
ValidatorForm 或 ValidatorActionForm(不可繼承 ActionForm)。struts-config.xml <action name="logonForm"> 的 name 屬性匹配 validation.xml <form name="logonForm">。<action path="/logon"> 的 path 屬性匹配(需去掉斜線)。
<action path="/logon"
type="com.example.LogonAction"
name="logonForm"
scope="request"
input="/logon.jsp" <!-- 驗證失敗導向頁面 -->
validate="true" > <!-- 必須為 true 啟用自動驗證 -->
<forward name="success" path="/welcome.jsp"/>
<forward name="failure" path="/error.jsp"/>
</action>
<logic:messagesPresent>
<bean:message key="errors.header"/>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</logic:messagesPresent>
onsubmit:<html:form action="/logon.do" onsubmit="return validateLogonForm(this);">return validate + 首字大寫 FormBean name + Form(this)。<html:javascript formName="logonForm" staticJavascript="true"/>formName 需與 struts-config.xml 完全一致(含大小寫)。staticJavascript="true" 使用 JS 驗證,false 則伺服端驗證。
errors.header=請修正以下錯誤:
errors.required={0} 不能為空。
errors.minlength={0} 長度不能小於 {1} 字元。
errors.maxlength={0} 長度不能大於 {1} 字元。
errors.invalid={0} 格式不正確。
errors.range={0} 必須在 {1} 到 {2} 之間。
prompt.username=使用者帳號
prompt.password=密碼
prompt.confirmPassword=確認密碼
Struts Validator 將驗證邏輯外部化為 XML 配置,實現「零程式碼」驗證,支援伺服端/客戶端雙模式無縫切換。掌握 validator-rules.xml 擴充自訂驗證器、validation.xml 靈活組合規則、ValidatorForm 與 Action 正確綁定,即可構建健壯且易維護的表單驗證體系。