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

Struts2 數據校驗核心類、雙模式校驗與常見問題解決全攻略

     編輯:Java 綜合教學

Struts2 數據校驗核心類、雙模式校驗與常見問題解決全攻略

Struts2 校驗體系建立在 ActionSupport 基礎上,提供編碼式(validate())與 XML 聲明式兩種模式。本文系統梳理核心類結構、兩種校驗方式配置、主題樣式衝突解決及訪問器模式校驗嵌套對象。

ActionSupport 核心能力

實現接口:Action、Validateable、ValidationAware、TextProvider、LocaleProvider、Serializable。
關鍵方法:

  • validate():模板方法,execute() 前自動調用
  • addFieldError(field, msg):註冊字段錯誤
  • getFieldErrors():獲取錯誤映射
  • getText(key):國際化消息獲取

模式一:編碼式校驗

public class LoginValidateAction extends ActionSupport {
    private User user;
    @Override
    public void validate() {
        if (user.getUname().isEmpty()) 
            addFieldError("uname", "用戶名不能為空!");
        if (user.getUpwd().isEmpty()) 
            addFieldError("upwd", "密碼不能為空!");
    }
    public String execute() {
        if ("admin".equals(user.getUname()) && "admin".equals(user.getUpwd())) 
            return SUCCESS;
        return INPUT;
    }
    // getter/setter
}

struts.xml 需配置 <result name="input"> 跳轉回輸入頁。

主題樣式問題與解決

默認 XHTML 主題 自動生成表格佈局,導致 <s:fielderror/> 顯示混亂。
方案:全局切換 Simple 主題:

<constant name="struts.ui.theme" value="simple" />

或標簽級指定 theme="simple"。Simple 主題輸出純文本/簡單標籤,便於 CSS 控制。
進階顯示:使用 <s:property value="fieldErrors.uname[0]"/> 精確輸出首條錯誤。

默認樣式 XHTML 輸出結構 主題配置 Simple 效果 精確輸出效果 校驗文件位置

模式二:XML 配置式校驗

文件命名:Action類名-validation.xml,同包目錄。
執行順序:XML 校驗優先於 validate()。
三類校驗規則:

1. Field 校驗(針對單屬性)

<field name="uname">
  <field-validator type="requiredstring">
    <message>用戶名不能為空</message>
  </field-validator>
</field>

2. 非 Field 校驗(OGNL 表達式跨字段)

<validator type="fieldexpression">
  <param name="expression"><![CDATA[pwd == pwd2]]></param>
  <message>兩次密碼不一致</message>
</validator>

3. Visitor 校驗(嵌套對象/模型驅動)

Action 中屬性 user 為自定義類型:

<field name="user">
  <field-validator type="visitor">
    <param name="context">userContext</param>
    <param name="appendPrefix">true</param>
    <message>用戶信息</message>
  </field-validator>
</field>

需提供 User-userContext-validation.xml(User 類同包)定義嵌套字段校驗。

完整 XML 示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
  "-//Apache Struts//XWork Validator 1.0.2//EN" 
  "https://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
  <field name="uname">
    <field-validator type="requiredstring">
      <message>用戶名不能為空</message>
    </field-validator>
  </field>
  <field name="upwd">
    <field-validator type="requiredstring">
      <message>密碼不能為空</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="minLength">6</param>
      <param name="maxLength">18</param>
      <message>密碼長度 ${minLength}--${maxLength} 位</message>
    </field-validator>
  </field>
</validators>

總結

  • 繼承 ActionSupport 獲取校驗、國際化、錯誤收集能力
  • XML 聲明式適合通用規則,編碼式適合複雜業務邏輯
  • 全局設置 struts.ui.theme=simple 避免默認樣式干擾
  • Visitor 校驗支撐模型驅動模式下的嵌套對象驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved