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

Struts2 數據校驗機制:validate 方法與字段錯誤顯示

     編輯:Java 綜合教學

為什麼需要校驗

用戶輸入不可信:格式錯誤、必填漏填、惡意腳本等。校驗能在進入業務邏輯前攔截非法數據,回顯錯誤提示。

實作步驟

  1. Action 繼承 ActionSupport(預設實作 Validateable)。
  2. 覆寫 validate() 方法,調用 addFieldError(fieldName, message)。
  3. JSP 用 <s:fielderror fieldName="..."/> 顯示錯誤。
  4. struts.xml 配置 <result name="input"> 返回輸入頁。

程式碼範例

LoginAction

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 略
}

login.jsp

<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>

struts.xml

<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 跳過特定方法校驗。

最佳實踐

  • 前端 JS 做首輪攔截(用戶體驗),後端 validate() 做最終防線(安全性)。
  • 錯誤訊息鍵名統一規範:error + 欄位名。
  • 國際化:將訊息放入 global.properties,用 getText("key") 讀取。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved