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

Struts2 服務端數據校驗:ActionSupport 編碼式校驗與 XML 配置式校驗詳解

     編輯:Java 綜合教學

Struts2 服務端數據校驗:ActionSupport 編碼式校驗與 XML 配置式校驗詳解

Struts2 提供兩種服務端校驗方式:重寫 ActionSupport.validate() 方法(編碼式)與專用 XML 配置文件(聲明式)。本文對比兩種模式並解決常見顯示樣式問題。

核心類:ActionSupport

自定義 Action 建議繼承 com.opensymphony.xwork2.ActionSupport,它實現:

  • Action 接口(SUCCESS/ERROR/LOGIN/INPUT/NONE 常量 + execute())
  • Validateable:提供 validate() 模板方法,在 execute() 前調用
  • ValidationAware:收集字段/Action 錯誤消息(addFieldError 等)
  • TextProvider/LocaleProvider:國際化支持

方式一:編碼式校驗(重寫 validate())

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; // 校驗失敗或業務失敗返回 INPUT
    }
    // getter/setter
}

struts.xml 配置

<action name="LoginValidateAction" class="cn.struts2.action.LoginValidateAction">
  <result name="success">success.jsp</result>
  <result name="input">LoginValidateAction.jsp</result> <!-- 校驗失敗跳轉 -->
</action>

JSP 頁面顯示錯誤

<s:fielderror /> <!-- 顯示所有字段錯誤 -->
<!-- 或單字段 --> <s:fielderror fieldName="uname" />

樣式問題與解決

現象:默認 XHTML 主題自動包裝 <table><tr><td>,導致錯誤消息佈局混亂。
解決:在 struts.xml 全局設置簡潔主題:

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

或單標簽指定 theme="simple"。Simple 主題不輸出多餘標籤,便於自定義 CSS。

默認樣式問題 XHTML 主題輸出 Simple 主題效果

方式二:XML 配置式校驗(聲明式)

規則:文件名 Action類名-validation.xml,放置於 Action 同包下。
優先級:XML 校驗先於編碼式校驗執行。

校驗文件 LoginValidateAction-validation.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>

常用校驗器

  • requiredstring:非空字符串
  • stringlength:長度範圍
  • int/double/date:類型與範圍
  • regex:正則表達式
  • fieldexpression:OGNL 表達式跨字段校驗(如密碼一致性)
  • visitor:嵌套對象校驗(模型驅動模式)

總結

維度編碼式 validate()XML 配置式
靈活性高(任意 Java 邏輯)中(預定義校驗器)
復用性低高(可共享校驗文件)
維護性代碼耦合聲明分離
執行順序後前

建議:通用規則(非空、長度、格式)用 XML;複雜業務規則用 validate()。統一設置 struts.ui.theme=simple 避免樣式干擾。

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