用戶輸入不可信:格式錯誤、必填漏填、惡意腳本等。校驗能在進入業務邏輯前攔截非法數據,回顯錯誤提示。
ActionSupport(預設實作 Validateable)。validate() 方法,調用 addFieldError(fieldName, message)。<s:fielderror fieldName="..."/> 顯示錯誤。<result name="input"> 返回輸入頁。public class LoginAction extends ActionSupport {
private String username, userpwd;
@Override
public void validate() {
if (username == null || username.length() == 0) {
addFieldError("errorname", "用戶名不能為空");
}
if (userpwd == null || userpwd.length() == 0) {
addFieldError("errorpwd", "密碼不能為空");
}
}
@Override
public String execute() {
if ("123".equals(username) && "123".equals(userpwd)) {
ActionContext.getContext().getSession().put("name", username);
return SUCCESS;
}
return INPUT; // 校驗失敗或業務失敗回輸入頁
}
// getter/setter 略
}
<s:fielderror fieldName="errorname"/>
<s:fielderror fieldName="errorpwd"/>
<form action="Login.action" method="post">
用戶名:<input type="text" name="username"/>
密碼:<input type="password" name="userpwd"/>
<input type="submit" value="登錄"/>
</form>
<constant name="struts.devMode" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="cn.action.LoginAction">
<result name="success">/Login/success.jsp</result>
<result name="input">/Login/login.jsp</result> <!-- 校驗失敗回這裡 -->
</action>
</package>
Struts2 預設用 XHTML 主題渲染標籤(含 table/tr/td),導致佈局混亂。在 struts.xml 加入:
<constant name="struts.ui.theme" value="simple"/>
即可輸出純 HTML 標籤,完全由開發者控制 CSS。
ActionName-validation.xml。@RequiredStringValidator、@RegexFieldValidator 等(需插件支援)。@SkipValidation 跳過特定方法校驗。validate() 做最終防線(安全性)。error + 欄位名。global.properties,用 getText("key") 讀取。