Struts2 ActionSupport 提供兩種錯誤收集機制,分別對應「Action 層級」與「欄位層級」,顯示標籤與資料結構皆不同。
public void addActionError(String anErrorMessage)
List<String><s:actionerror />(一次渲染所有錯誤)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>,適合客製化排版。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...
}
<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>