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

Struts 從零開始 (五):資料驗證完整指南 (手動驗證與 Validator 框架)

     編輯:Java 相關知識

一、ActionForm 手動表單驗證

validate() 方法

負責檢查資料格式與語法,不涉及業務邏輯。預設回傳 null,子類別需覆寫。

reset() 方法

還原屬性預設值 (如字串設為 null 或初始值)。

實作範例 (LoginActionForm)

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    ActionErrors errors = new ActionErrors();
    if (username == null || username.equals("")) {
        errors.add(ActionErrors.GLOBAL_MESSAGE,
            new ActionError("loginform.error.username"));
    }
    if (userpass == null || userpass.equals("")) {
        errors.add(ActionErrors.GLOBAL_MESSAGE,
            new ActionError("loginform.error.password"));
    }
    return errors;
}

回傳 ActionErrors:null 或空集合 = 驗證通過;含 ActionMessage = 驗證失敗,轉發至 input 指定資源。

資源檔配置

# ApplicationResources.properties
loginform.error.username=please enter your username
loginform.error.password=please enter your password

# ApplicationResources_zh_CN.properties
loginform.error.username=請輸入用戶名
loginform.error.password=請輸入密碼

struts-config.xml 設定驗證

<action path="/login" name="loginActionForm" scope="request"
        type="actions.LoginAction" validate="true" input="/login.jsp">

validate="true" 啟用驗證,input 指定失敗轉向頁面。

login.jsp 顯示錯誤訊息

<html:messages id="error">
    <li><bean:write name="error"/></li>
</html:messages>
  • message="true":從 Globals.MESSAGE_KEY 取得訊息
  • message="false" (預設):從 Globals.ERROR_KEY 取得錯誤訊息

執行測試

瀏覽 https://localhost:8080/Struts1_Login/login.jsp,不輸入直接送出,顯示錯誤訊息。

驗證錯誤顯示

二、Validator 驗證框架

Validator 屬 Jakarta Commons 專案,內建於 Struts 發布包。克服手動驗證侷限:無需硬編碼邏輯、支援規則複用、彈性配置。

核心組件

組件說明
驗證器內建 required、mask、minLength、maxLength、range、date、email、creditCard 等;可擴充自訂驗證器
資源檔提供本地化標籤與訊息,預設共用 Struts 訊息資源
XML 配置validator-rules.xml (全域規則)、validation.xml (專案具體規則)
JSP 標籤<html:javascript> 產生客戶端 JavaScript 驗證碼
ValidatorForm依 FormBean 名稱自動驗證屬性
ValidatorActionForm依 Action 路徑自動驗證屬性

安裝與配置

  1. 將 jakarta-oro.jar、commons-validator.jar 放入 WEB-INF/lib
  2. validator-rules.xml、validation.xml 放入 WEB-INF
  3. struts-config.xml 加入 PlugIn:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"
        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>

validator-rules.xml (全域規則定義)

根元素 <form-validation>,含 <global> 定義多個 <validator>。屬性:name、classname、method、methodParams、depends、msg (資源檔 Key)。

validation.xml (專案具體規則)

根元素 <form-validation>,含 <global> (常數)、<formset>。
<form name="loginActionForm"> 對應 FormBean 名稱,內含 <field property="username" depends="required"> 等欄位驗證規則,<msg key="errors.required"/> 指定錯誤訊息 Key。

修改 FormBean 繼承 ValidatorForm

將 ActionForm 改為 ValidatorForm,移除手寫 validate()、reset()。

資源檔完整範例

# 通用錯誤訊息 (英文/中文)
errors.required={0} is required. / {0} 是必須的.
errors.minlength={0} can not be less than {1} characters. / {0} 不能少於 {1} 個字符.
...
# 表單標籤
label.username=UserName: / 用戶名:
label.password=Password: / 密碼:

伺服器端驗證測試

直接送出空表單,顯示配置的錯誤訊息。

伺服器端驗證 驗證結果

三、客戶端驗證 (JavaScript 自動生成)

Validator 框架亮點:伺服器自動生成 JS 驗證碼,減輕伺服器負載。

login.jsp 修改兩處

  1. 加入 <html:javascript formName="loginActionForm" /> 產生 JS 函式
  2. <html:form ... onsubmit="return validateLoginActionForm(this);"> 綁定提交事件 (FormBean 名稱首字大寫)
<html:javascript formName="loginActionForm" />
<html:form action="login.do" onsubmit="return validateLoginActionForm(this);">
    ...
</html:form>

測試結果

瀏覽器彈出原生對話框顯示錯誤,無需送往伺服器。

客戶端驗證彈窗 驗證通過

結語

從手動驗證進階至 Validator 框架,再啟用客戶端驗證,僅需修改 FormBean 繼承類別、配置 XML 與 JSP 兩行標籤。Validator 框架極大提升開發效率與使用者體驗。

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