首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Struts Validator 框架完整指南:表單驗證零代碼實現

     編輯:Java 程式設計入門

Validator 概述

無 Validator 時,需在 Form Bean 的 validate() 手寫所有驗證邏輯與錯誤訊息儲存。有了 Validator,Form Bean 繼承 Validator 提供的 ActionForm 子類,框架自動處理驗證與錯誤訊息,無需撰寫驗證代碼。

Validator 為可插拔驗證例行程式系統,每個例行程式為一 Java 方法,預設內建常用驗證(required、email、creditCard 等),支援伺服端與客戶端(JavaScript)雙重驗證。

兩大配置檔

  • validator-rules.xml:定義可用驗證例行程式、邏輯名稱、類別/方法、客戶端 JavaScript 代碼。
  • validation.xml:將驗證例行程式套用至特定 Form Bean 欄位,透過 struts-config.xml 的 Form Bean 邏輯名稱關聯。

啟用 Validator 外掛

<!-- struts-config.xml -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" 
        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>

建立 Form Bean 兩種方式

1. 繼承 ValidatorForm(傳統)

public class LogonForm extends ValidatorForm {
    private String username, password;
    // getter/setter,無需實作 validate()/reset()
}

2. 動態 DynaValidatorForm(無需建立類別)

<form-bean name="LogonForm" type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="username" type="java.lang.String"/>
    <form-property name="password" type="java.lang.String"/>
</form-bean>

進階:依 Action 區分驗證

同一 Form Bean 用於多個 Action 時,部分欄位僅特定 Action 需驗證。解決方案:

  • Form Bean 繼承 ValidatorActionForm 或使用 DynaValidatorActionForm。
  • validation.xml 中 <form name="/actionPath"> 對應 Action 路徑而非 Form Bean 名稱。
<action-mappings>
    <action path="/createAddress" ... name="addressForm"/>
    <action path="/editAddress" ... name="addressForm"/>
</action-mappings>

<form-validation>
    <formset>
        <form name="/createAddress"> ... </form>
        <form name="/editAddress"> ... </form>
    </formset>
</form-validation>

validation.xml 結構詳解

<!DOCTYPE form-validation PUBLIC ...>
<form-validation>
    <formset>
        <form name="LogonForm">
            <field property="username" depends="required">
                <arg0 key="prompt.username"/>
            </field>
            <field property="password" depends="required,minlength">
                <arg0 key="prompt.password"/>
                <arg1 key="${var:minlength}" name="minlength"/>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>6</var-value>
                </var>
            </field>
        </form>
    </formset>
</form-validation>
  • depends:引用 validator-rules.xml 中的邏輯名稱,可串聯多個驗證。
  • arg0~arg3:對應錯誤訊息佔位符 {0}~{3},key 指向 ApplicationResources.properties 鍵值。

錯誤訊息配置

# ApplicationResources.properties
errors.required={0} is required.
errors.minlength={0} cannot be less than {1} characters.
# ... 其他預設訊息

Validator 透過資源綁定機制實現國際化錯誤訊息,避免硬編碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved