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

Struts 2 表單驗證全解析:編程式、聲明式與客戶端驗證

     編輯:Java 相關知識

「所有輸入都是邪惡的」——表單作為應用最直接入口,數據驗證至關重要。Struts 2 提供轉換驗證雙重保障、編程式驗證、聲明式驗證框架及客戶端腳本支持,構建完整驗證體系。本文通過實例深度剖析各類驗證機制、執行順序、最佳實踐及國際化配置。

轉換與驗證:基礎鏈路

Struts 2 認為類型轉換是驗證前提:只有正確轉換為目標類型,才能進行取值範圍檢查。以 Locale 類型轉換為例:

public class LocaleConverter extends DefaultTypeConverter {
    public Object convertValue(Map context, Object value, Class toType) {
        if (toType == Locale.class) {
            String locale = ((String[])value)[0];
            return new Locale(locale.substring(0,2), locale.substring(3));
        }
        // ...
    }
}

驗證執行順序(控制台輸出可見):

  1. 類型轉換:參數 → Bean 屬性,失敗由 conversionError 攔截器封裝為 fieldError。
  2. 方法級驗證:反射調用 validateXxx()(Xxx 為 Action 方法名)。
  3. 通用驗證:調用 validate()(實現 Validateable 接口)。
  4. 業務執行:無錯誤則調用 execute(),否則返回 input 結果輸出錯誤。

驗證順序圖

選擇建議

  • 格式驗證:放在轉換器中,配置 invalid.fieldvalue.屬性名 國際化提示格式錯誤。
  • 取值範圍驗證:放在 validate() 中,性能優於反射調用的 validateXxx()。
  • 依賴具體 Action 方法:才使用 validateXxx()。

聲明式驗證框架:XML 配置驅動

通過 Action類名-validation.xml 配置,自動由 validation 攔截器處理(位於 conversionError 之後、validateXxx() 之前)。

基本配置

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
  "https://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  <field name="requiredString">
    <field-validator type="requiredstring">
      <message>This string is required</message>
    </field-validator>
  </field>
</validators>

啟用客戶端驗證

  1. 在 <message> 添加 key 屬性關聯國際化資源。
  2. JSP 中 <s:form validate="true"> 引入 JS 驗證腳本(需 <s:head/>)。
  3. 通過 Action 訪問輸入頁以預加載國際化消息。

客戶端驗證效果

配置文件查找機制:支持繼承複用

驗證配置按類層次自上而下查找,子類自動繼承父類驗證規則,無需重複配置。例如 Dog extends QuadrapedImpl,查找順序:

Animal-validation.xml
Animal-alias-validation.xml
AnimalImpl-validation.xml
...
Dog-validation.xml
Dog-alias-validation.xml

內置驗證器速查表

類型類名用途
requiredRequiredFieldValidator字段非空
requiredstringRequiredStringValidator字符串非空非空白
int/double/dateIntRangeFieldValidator 等數值/日期範圍
expressionExpressionValidatorOGNL 表達式驗證
email/urlEmailValidator/URLValidator郵箱/URL 格式
visitorVisitorFieldValidator嵌套對象驗證
conversionConversionErrorFieldValidator類型轉換錯誤處理
stringlength/regexStringLengthFieldValidator/RegexFieldValidator長度/正則

詳細用法參考:官方文檔

最佳實踐總結

  1. 優先使用聲明式框架:分離驗證邏輯,可維護性最強。
  2. 轉換器處理格式:配合 invalid.fieldvalue.xxx 給出友好格式提示。
  3. 國際化所有消息:<message key="..."/> + 資源文件。
  4. 按需啟用客戶端驗證:validate="true" 提升用戶體驗,服務端仍為最終防線。
  5. 善用繼承查找機制:避免驗證規則重複定義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved