| 層級 | 方法 | 數據結構 | 適用場景 |
|---|---|---|---|
| Field | addFieldError("fieldName", "msg") | Map<String, List<String>> | 特定表單欄位校驗失敗 |
| Action | addActionError("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);
}
Struts 標籤(如 <s:textfield>)預設顯示對應 Field 錯誤。
若表單同時存在 Field 與 Action 錯誤,預設主題下 Field 錯誤優先,Action 錯誤可能被忽略。
<s:form action="RegisterAction" theme="simple">
<!-- 手工佈局 -->
<s:actionerror /> <!-- 顯示 Action 錯誤 -->
<s:fielderror /> <!-- 顯示 Field 錯誤(可選) -->
</s:form>
優點:完全控制 HTML 結構,可並排顯示兩類錯誤;缺點:失去預設主題的自動佈局便利。
theme="simple" 手工佈局。<s:actionerror/> 展示。