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

Struts2 addActionError 與 addFieldError 差異詳解

     編輯:Java 相關知識

Struts2 ActionSupport 提供兩種錯誤收集機制,分別對應「Action 層級」與「欄位層級」,顯示標籤與資料結構皆不同。

一、addActionError - Action 層級錯誤

public void addActionError(String anErrorMessage)
  • 儲存結構:List<String>
  • 顯示標籤:<s:actionerror />(一次渲染所有錯誤)
  • 適用場景:業務邏輯失敗、權限不足、系統異常等非特定欄位錯誤。

二、addFieldError - 欄位層級錯誤

public void addFieldError(String fieldName, String errorMessage)
  • 儲存結構:Map<String, List<String>>(Key 為欄位名)
  • 顯示標籤:
    • <s:fielderror />:顯示所有欄位錯誤
    • <s:fielderror><s:param>field1</s:param></s:fielderror>:指定欄位
  • 適用場景:表單驗證失敗(如帳號格式錯誤、密碼長度不足)。

三、主題影響

  • 預設主題 (xhtml):<s:form> 自動渲染欄位錯誤訊息與表格排版。
  • theme="simple":不自動顯示錯誤,需手動放置 <s:fielderror>,適合客製化排版。

四、hasErrors() 綜合判斷

public boolean hasErrors() {
    return hasActionErrors() || hasFieldErrors();
}

驗證失敗時,Struts2 會自動返回 INPUT 結果,並渲染對應錯誤標籤。

五、程式碼範例

public class UserAction extends ActionSupport {
    private String username;
    private String password;

    public String execute() {
        if (username == null || username.length() < 3) {
            addFieldError("username", "帳號至少 3 碼");
        }
        if (password == null || password.length() < 6) {
            addFieldError("password", "密碼至少 6 碼");
        }
        if (hasFieldErrors()) return INPUT;

        if (!userService.login(username, password)) {
            addActionError("帳號或密碼錯誤");
            return ERROR;
        }
        return SUCCESS;
    }
    // Getter/Setter...
}

六、JSP 顯示範例

<s:actionerror cssClass="error-msg" />
<s:form action="login" theme="simple">
    <s:textfield name="username" label="帳號" />
    <s:fielderror><s:param>username</s:param></s:fielderror>
    <s:password name="password" label="密碼" />
    <s:fielderror><s:param>password</s:param></s:fielderror>
    <input type="submit" value="登入" />
</s:form>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved