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

Struts 2 數據驗證基礎:函數驗證機制與實戰技巧

     編輯:Java 相關知識

前言:ActionSupport 驗證核心契約

Struts 2 的函數驗證建立在 ActionSupport 實現的 ValidationAware 接口之上,提供兩級錯誤收集:

  • Field 錯誤(fieldError): Map<String, List<String>>,綁定具體屬性名,頁面可用 <s:fielderror fieldName="xxx"> 定點顯示。
  • Action 錯誤(actionError): Collection<String>,無屬性綁定,頁面需用 <s:actionerror> 統一顯示(預設 ul 列表)。

驗證執行流程圖解

  1. 類型轉換與預設值填充: 請求參數按 Action 屬性型別轉換;空值轉為型別預設值(0、0.0、"");轉換失敗(如 age 輸入字母)自動加入轉換錯誤並返回 input。
  2. 驗證機制啟動: 依序執行 validate()、validate{MethodName}()、XML 驗證;過程中調用 addFieldError()/addActionError() 記錄錯誤。
  3. 決策分流: ValidationAware.hasErrors() 檢查兩個容器是否為空 → 空則調用 execute()(或指定 method)進入業務邏輯 → 非空直接返回 input 結果碼。
  4. 結果導向: struts.xml 中 <result name="input"> 通常映射回輸入頁面,錯誤訊息自動回顯。

多方法驗證與跳轉支援

struts.xml 配置替代執行方法

<action name="UserAction" class="com.demo.UserAction" method="register">
  <result>/success.jsp</result>
  <result name="input">/register.jsp</result>
</action>

Action 中定義對應方法與驗證方法

public String register() { /* 業務邏輯 */ return SUCCESS; }

public void validateRegister() { /* register 專用驗證 */ }

// 通用驗證(所有方法前執行)
public void validate() { /* 共用驗證邏輯 */ }

執行順序: validateRegister() → validate() → XML 驗證。
實現原理: Java 反射動態查找方法,**效能稍低,無特殊需求請優先使用 XML 驗證**。

錯誤訊息國際化(i18n)兩種方式

1. 全域預設錯誤訊息

<!-- struts.xml -->
<constant name="struts.custom.i18n.resources" value="message"/>
# message.properties
xwork.default.invalid.fieldvalue={0} 輸入格式錯誤

2. Action 專屬錯誤訊息

在 Action 同包目錄建立 ActionName.properties:

# UserAction.properties
invalid.fieldvalue.username=用戶名只能包含字母數字
invalid.fieldvalue.email=郵箱格式不正確

頁面顯示錯誤的標籤用法

<s:form action="UserAction_register">
  <s:textfield name="username" label="用戶名"/>
  <s:fielderror fieldName="username"/>  <!-- 顯示該字段錯誤 -->

  <s:textfield name="email" label="郵箱"/>
  <s:fielderror fieldName="email"/>

  <s:actionerror/>  <!-- 顯示所有 Action 級錯誤 -->
  <s:submit value="註冊"/>
</s:form>

最佳實踐清單

  • 優先使用 XML 驗證(聲明式、可複用、效能佳),函數驅動僅作補充。
  • 共用驗證邏輯放入 validate(),方法專用放入 validateXxx()。
  • 所有面向用戶的錯誤訊息**必須**外部化到 properties 檔,支援多語言。
  • 輸入頁面務必配置 <result name="input">,否則驗證失敗會拋 404。
  • 大量表單驗證時,考慮引入 VisitorFieldValidator 級聯驗證嵌套物件,避免重複定義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved