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

Struts 2 數據驗證進階:XML 驗證框架完整指南

     編輯:Java 相關知識

前言:聲明式驗證,關注點分離

Struts 2 提供基於 XML 的聲明式驗證框架,將驗證邏輯從 Action 代碼中剝離,實現「配置而非編碼」。驗證檔案命名約定:Action類名-validation.xml 或 Action類名-方法名-validation.xml,置於 Action 同包目錄下。

XML 結構速覽(DTD 核心元素)

<!ELEMENT validators (field | validator)+>
<!ELEMENT field (field-validator+)>
<!ATTLIST field name CDATA #REQUIRED>
<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator type CDATA #REQUIRED; short-circuit (true|false) "false">
<!ELEMENT validator (param*, message)>
<!ATTLIST validator type CDATA #REQUIRED; short-circuit (true|false) "false">
<!ELEMENT param (#PCDATA)>
<!ATTLIST param name CDATA #REQUIRED>
<!ELEMENT message (#PCDATA)>
<!ATTLIST message key CDATA #IMPLIED>

根元素 <validators> 下可包含兩類子元素:

  • field —— 針對單一屬性的字段級驗證
  • validator —— 非字段綁定的全局/非字段驗證

一、字段級驗證

基本範例

<validators>
  <field name="username">
    <field-validator type="requiredstring">
      <message key="error.username.required"/>
    </field-validator>
  </field>

  <field name="password">
    <field-validator type="stringlength">
      <param name="trim">true</param>
      <param name="minLength">4</param>
      <param name="maxLength">10</param>
      <message>密碼長度必須在 ${minLength} 到 ${maxLength} 之間</message>
    </field-validator>
  </field>
</validators>

關鍵細節解析

  1. type 從何而來? 定義於 com.opensymphony.xwork2.validator.validators.default.xml,映射驗證器名稱到實作類。常用內建驗證器:
type 名稱實作類用途
requiredstringRequiredStringValidator非空且非空白字串
stringlengthStringLengthFieldValidator字串長度範圍(支援 trim/minLength/maxLength)
int / double / dateIntRangeFieldValidator 等數值/日期範圍
email / urlEmailValidator / URLValidator格式驗證
regexRegexFieldValidator正則表達式
fieldexpressionFieldExpressionValidator多字段關聯比較(OGNL 表達式)
visitorVisitorFieldValidator級聯驗證嵌套物件
conversionConversionErrorFieldValidator類型轉換錯誤捕獲
  1. param 對應驗證器類的屬性:如 StringLengthFieldValidator 定義了 trim、minLength、maxLength 三個屬性及 setter。
  2. message 規則:
    • 每個 field-validator 必須有一個 <message>。
    • 可引用 param 變數:${minLength}。
    • 可用 key 屬性指向國際化資源檔鍵值。
    • 錯誤最終透過 addFieldError(fieldName, msg) 註冊,頁面用 <s:fielderror> 顯示。

二、非字段/全局驗證

適用於多字段共用同一驗證規則(如「用戶名、密碼、確認密碼」皆非空)。

<validators>
  <validator type="requiredstring" short-circuit="true">
    <param name="fieldName">username</param>
    <param name="fieldName">password</param>
    <param name="fieldName">password_confirmed</param>
    <message key="error.field.required"/>
  </validator>

  <validator type="stringlength">
    <param name="trim">true</param>
    <param name="minLength">4</param>
    <param name="maxLength">10</param>
    <param name="fieldName">password</param>
    <param name="fieldName">password_confirmed</param>
    <message>密碼長度必須在 ${minLength} 到 ${maxLength} 之間</message>
  </validator>
</validators>

差異總結: 字段驗證「先定字段,再定驗證器」;全局驗證「先定驗證器,再列字段」。兩種可混用。

三、進階主題

1. 多方法與繼承驗證

  • Action 配置 method="newExecute" 時,驗證檔命名為 Action-newExecute-validation.xml。
  • 同時存在 Action-validation.xml 會額外執行(疊加)。
  • 父類驗證優先於子類執行。

2. 客戶端驗證(不推薦生產使用)

  • 在 <s:form validate="true"> 啟用,生成 JavaScript 驗證碼。
  • 功能弱、靈活性低、不安全,**僅供原型演示**,生產環境應依賴伺服器端驗證。
  • 若需客戶端體驗,建議手寫 JS 或整合前端驗證庫(如 Parsley、VeeValidate)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved