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

Struts 2 Action/Field 級錯誤處理機制深度解析

     編輯:Java 相關知識

兩類錯誤的區別

層級方法數據結構適用場景
FieldaddFieldError("fieldName", "msg")Map<String, List<String>>特定表單欄位校驗失敗
ActionaddActionError("msg")Collection<String>業務邏輯錯誤、全局提示

源碼追蹤

ActionSupport 實現 ValidationAware,委派給 ValidationAwareSupport:

// Field 錯誤
private Map<String, List<String>> fieldErrors;
public void addFieldError(String fieldName, String errorMessage) {
    List<String> list = fieldErrors.get(fieldName);
    if (list == null) { list = new ArrayList<>(); fieldErrors.put(fieldName, list); }
    list.add(errorMessage);
}

// Action 錯誤
private Collection<String> actionErrors;
public void addActionError(String anErrorMessage) {
    actionErrors.add(anActionMessage);
}

JSP 顯示控制

預設行為

Struts 標籤(如 <s:textfield>)預設顯示對應 Field 錯誤。

同時顯示兩類錯誤的衝突

若表單同時存在 Field 與 Action 錯誤,預設主題下 Field 錯誤優先,Action 錯誤可能被忽略。

解決方案:使用 simple 主題

<s:form action="RegisterAction" theme="simple">
    <!-- 手工佈局 -->
    <s:actionerror />   <!-- 顯示 Action 錯誤 -->
    <s:fielderror />   <!-- 顯示 Field 錯誤(可選) -->
</s:form>

優點:完全控制 HTML 結構,可並排顯示兩類錯誤;缺點:失去預設主題的自動佈局便利。

最佳實踐建議

  1. 欄位格式錯誤用 Field Error,業務規則違反用 Action Error。
  2. 需同時展示時,採用 theme="simple" 手工佈局。
  3. 全局錯誤頁面統一用 <s:actionerror/> 展示。
  4. AJAX 回傳 JSON 時,將兩類錯誤分別序列化,前端分區顯示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved