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

Struts 2 資料驗證全攻略:程式碼驗證、XML 規則、訊息顯示客製化與主題切換

     編輯:Java 相關知識

Struts 2 驗證機制核心:ActionSupport 與 Validateable

Struts 2 的驗證核心在於 ActionSupport 實作了 Validateable 介面,提供 validate() 生命週期方法。框架在呼叫 execute() 前自動調用 validate(),若發現錯誤 (透過 addFieldError / addActionError 記錄),則中斷執行並導向 input 結果頁面。

方式一:程式碼驗證 — 彈性最高,適合複雜業務邏輯

public class UserAction extends ActionSupport {
    private User user; // 模型驅動

    @Override
    public void validate() {
        // 欄位級驗證
        if (user.getUsername() == null || user.getUsername().length() < 4) {
            addFieldError("username", "用戶名長度至少 4 字元");
        }
        // 物件級驗證 (跨欄位)
        if (!user.getPassword().equals(user.getConfirmPassword())) {
            addActionError("兩次密碼輸入不一致");
        }
    }

    public String execute() { return SUCCESS; }
    // getter/setter
}

struts.xml 關鍵配置: 必須為 Action 定義 name="input" 的 <result>,指向回顯表單的頁面。

方式二:XML 宣告式驗證 — 關注點分離,便於維護與國際化

建立 Action類名-validation.xml 放在同包目錄下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
    "https://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <!-- 欄位驗證器 -->
    <field name="username">
        <field-validator type="requiredstring">
            <message>用戶名不可為空</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minLength">4</param>
            <param name="maxLength">20</param>
            <message>用戶名長度需在 ${minLength}-${maxLength} 之間</message>
        </field-validator>
    </field>

    <field name="email">
        <field-validator type="email">
            <message>Email 格式不正確</message>
        </field-validator>
    </field>

    <!-- 非欄位驗證器 (跨欄位/運算式) -->
    <validator type="fieldexpression">
        <param name="expression">password == confirmPassword</param>
        <message>密碼與確認密碼不一致</message>
    </validator>

    <!-- Visitor 驗證 (巢狀物件) -->
    <field name="userProfile">
        <field-validator type="visitor">
            <param name="context">profileContext</param>
            <param name="appendPrefix">true</param>
            <message>個人資料:</message>
        </field-validator>
    </field>
</validators>

巢狀物件 UserProfile 需建立 UserProfile-profileContext-validation.xml。

驗證訊息顯示與主題客製化

預設 XHTML 主題產生 Table 佈局,難以控制樣式

解決方案:在 struts.xml 全域切換 Simple 主題,或頁面單獨指定:

<constant name="struts.ui.theme" value="simple" />
<!-- 或頁面標籤 -->
<s:form theme="simple" ...>

Simple 主題不輸出多餘 HTML,完全由開發者控制版面。

客製化錯誤訊息顯示位置與樣式

<!-- Action 級錯誤 (全域) -->
<s:actionerror cssClass="alert alert-danger" />

<!-- Field 級錯誤 (單欄位) -->
<s:textfield name="username" label="用戶名" />
<s:fielderror fieldName="username" cssClass="text-danger" />

<!-- 手動取得特定欄位第一條錯誤 -->
<s:property value="fieldErrors['username'][0]" />

執行流程總覽

  1. 參數攔截器填充 Action 屬性 (含類型轉換)
  2. 執行 XML 宣告式驗證 (若存在)
  3. 執行 validate() 程式碼驗證
  4. 轉換錯誤 → 導向 input 結果
  5. 無錯誤 → 執行 execute()

總結

Struts 2 提供程式碼與 XML 雙軌驗證,建議:簡單規則用 XML (可複用、支援國際化),複雜業務邏輯用程式碼。搭配 Simple 主題與 <s:fielderror> 客製化顯示,能構建體驗良好的表單驗證體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved