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

Struts 2 基礎:使用 validate() 方法實現數據驗證與錯誤處理

     編輯:Java 相關知識

Struts 2 中最直接的驗證方式是覆寫 ActionSupport 提供的 validate() 方法。框架在調用 execute() 前會自動呼叫 validate(),若發現錯誤則返回 input 結果,阻止 execute() 執行。本文將通過完整範例,講解字段錯誤、動作錯誤、成功訊息的添加與顯示,以及 ValidationAware 接口的核心方法。

核心機制

  • ActionSupport 實現 Validateable 接口,擁有 validate() 方法。
  • 驗證失敗時,調用 addFieldError()(字段級)或 addActionError()(動作級)記錄錯誤。
  • 驗證通過可調用 addActionMessage() 記錄成功訊息。
  • 若存在錯誤,框架自動返回 "input",不再執行 execute()。

實戰範例:驗證輸入必須為 "hello"

1. JSP 頁面 (validate.jsp)

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>驗證數據</title></head>
<body>
    <s:actionerror/>
    <s:actionmessage/>
    <s:form action="validate.action" theme="simple">
        輸入內容:<s:textfield name="msg"/>
        <s:fielderror key="msg.hello" />
        <br/>
        <s:submit/>
    </s:form>
</body>
</html>

<s:actionerror>、<s:fielderror>、<s:actionmessage> 分別顯示動作錯誤、字段錯誤、成功訊息;無訊息時不顯示。

2. Action 類 (ValidateAction.java)

package action;

import com.opensymphony.xwork2.ActionSupport;

public class ValidateAction extends ActionSupport {
    private String msg;

    @Override
    public String execute() {
        System.out.println(SUCCESS);
        return SUCCESS;
    }

    @Override
    public void validate() {
        if (!"hello".equalsIgnoreCase(msg)) {
            System.out.println(INPUT);
            addFieldError("msg.hello", "必須輸入 hello!");
            addActionError("處理動作失敗!");
        } else {
            addActionMessage("提交成功");
        }
    }

    // getter/setter 省略
}

字段錯誤需指定 key(對應 JSP fielderror 的 key),動作錯誤/訊息只需字串。

3. struts.xml 配置

<package name="demo" extends="struts-default">
    <action name="validate" class="action.ValidateAction">
        <result name="success">/error/validate.jsp</result>
        <result name="input">/error/validate.jsp</result>
    </action>
</package>

同一 JSP 處理 success 與 input,配合標籤顯示不同狀態。

ValidationAware 接口完整方法表

所有添加/獲取錯誤與訊息的方法均定義於 ValidationAware,ActionSupport 內部委託 ValidationAwareSupport 實現:

public interface ValidationAware {
    void setActionErrors(Collection errorMessages);
    Collection getActionErrors();
    void setActionMessages(Collection messages);
    Collection getActionMessages();
    void setFieldErrors(Map errorMap);
    Map getFieldErrors();
    void addActionError(String anErrorMessage);
    void addActionMessage(String aMessage);
    void addFieldError(String fieldName, String errorMessage);
    boolean hasActionErrors();
    boolean hasActionMessages();
    boolean hasErrors();
    boolean hasFieldErrors();
}

常用於在 JSP 或其他邏輯中程式化檢查錯誤狀態。

測試與總結

  • 訪問 https://localhost:8080/demo/validate.jsp 測試。
  • 輸入非 "hello":顯示字段錯誤(紅色)、動作錯誤。
  • 輸入 "hello":顯示成功訊息。
  • validate() 適合簡單、單一 Action 的驗證邏輯;複雜專案建議改用 Validation 框架(XML 配置)實現關注點分離。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved