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

Struts 1.x 系列教程(二):ActionForm validate 方法實現簡單數據驗證

     編輯:Java 相關知識

Struts 1.x 通過 ActionForm 封裝表單數據,並利用其 validate() 方法實現服務端數據驗證。本文通過完整的用戶註冊實例,詳細講解 validate 方法機制、ActionErrors 錯誤收集、錯誤信息國際化配置及 struts-config.xml 完整配置。

一、validate 方法核心機制

方法簽名:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)

執行流程:

  1. Servlet 引擎通過 ActionForm 實例裝載表單數據
  2. 調用 validate 方法進行驗證
  3. 返回 ActionErrors 對象(類 Map 結構)
  4. 無錯誤 → 繼續執行;有錯誤 → 跳轉到 input 指定頁面

二、完整實戰:用戶註冊驗證系統

需五步實現:JSP 頁面、Action 類、ActionForm+validate、屬性文件、Struts 配置。

【第1步】JSP 頁面 (simpleValidation.jsp)

<%@ page pageEncoding="GBK"%>
<%@ taglib uri="https://struts.apache.org/tags-html" prefix="html"%>
<html>
<head><title>注冊信息(測試簡單驗證)</title>
<style>.text {height:20px;width:160px;}</style></head>
<body>
<html:form action="simpleValidation">
<table width="100%">
  <tr>
    <td align="right" width="45%"> 用戶名:</td>
    <td width="55%">
      <html:text property="user" styleClass="text" />
      <font color="red"><html:errors property="errorUser" /></font>
    </td>
  </tr><tr /><tr />
  <tr>
    <td align="right">登錄密碼:</td>
    <td>
      <html:password property="password" styleClass="text" />
      <font color="red"><html:errors property="errorPassword" /></font>
    </td>
  </tr><tr /><tr />
  <tr>
    <td align="right">重復登錄密碼:</td>
    <td>
      <html:password property="password1" styleClass="text" />
      <font color="red"><html:errors property="errorPassword1" /></font>
    </td>
  </tr><tr /><tr />
  <tr>
    <td align="right">電子郵件:</td>
    <td>
      <html:text property="email" styleClass="text" />
      <font color="red"><html:errors property="errorEmail" /></font>
    </td>
  </tr><tr /><tr />
  <tr>
    <td align="right"> <br> ${requestScope.success } </td>
    <td align="left"> <br> <html:submit value=" 提交 " /> </td>
  </tr>
</table>
</html:form>
</body>
</html>

註:<html:errors property="..." /> 用於顯示特定字段的錯誤信息。

【第2步】Action 類 (action/SimpleValidationAction.java)

package action;
import javax.servlet.http.*;
import org.apache.struts.action.*;

public class SimpleValidationAction extends Action {
  public ActionForward execute(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response) throws Exception {
    request.setAttribute("success", "提交成功!");  // 設置成功信息
    return mapping.findForward("simple");  // 跳轉到 simple 對應的 JSP
  }
}

【第3步】ActionForm 與 validate 實現 (actionform/SimpleValidationForm.java)

package actionform;
import javax.servlet.http.*;
import org.apache.struts.action.*;

public class SimpleValidationForm extends ActionForm {
  private String user, password, password1, email;
  // getter/setter 省略...

  public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    ActionErrors errors = new ActionErrors();
    if (user == null || user.trim().equals(""))
      errors.add("errorUser", new ActionMessage("error.user.blank"));
    if (password == null || password.trim().equals(""))
      errors.add("errorPassword", new ActionMessage("error.password.blank"));
    if (password1 == null || !password1.equals(password))
      errors.add("errorPassword1", new ActionMessage("error.password1.confirmation"));
    if (email == null || email.trim().equals(""))
      errors.add("errorEmail", new ActionMessage("error.email.blank"));
    else if (!email.matches("\\w+@\\w+\\.\\w+"))
      errors.add("errorEmail", new ActionMessage("error.email.invalid"));
    return errors;
  }
}

關鍵注意點(8 大要點)

  1. 必須在 ActionForm 子類中覆寫 validate 方法才能啟用驗證
  2. validate 調用時 ActionForm 屬性已裝載用戶提交數據,可直接使用
  3. 使用 ActionErrors + ActionMessage 收集錯誤,ActionMessage 構造參數是屬性文件 key而非直接文本
  4. 字符串類型驗證適合用 ActionForm 屬性;數值類型(如整數)若用戶輸入非數字,屬性值為 0,需用 request.getParameter() 獲取原始輸入驗證
  5. JSP 中用 <html:errors> 顯示錯誤
  6. Struts 將 ActionErrors 以 org.apache.struts.action.ERROR 為鍵保存於 request 屬性中
  7. 可通過 Java 代碼手動從 request 獲取錯誤信息(文中有代碼示例)
  8. 錯誤信息最終從屬性文件讀取(下一步配置)

【第4步】屬性文件 (src/struts/ErrorDescription.properties)

error.user.blank = User can't be null.
error.password.blank = Password can't be null.
error.password1.confirmation = Password doesn't match confirmation.
error.email.blank = Email can't be null.
error.email.invalid = It is not a valid email address.

【第5步】struts-config.xml 配置

<form-bean name="simpleValidationForm" type="actionform.SimpleValidationForm" />

<action name="simpleValidationForm" path="/simpleValidation" scope="request" 
    type="action.SimpleValidationAction" input="simpleValidation.jsp">
  <forward name="simple" path="simpleValidation.jsp" />
</action>

<message-resources parameter="struts.ErrorDescription" />

關鍵屬性解析:

  • scope="request":ActionForm 實例保存於 request 範圍(鍵為 name 值);session 範圍不保存到 request
  • input:驗證失敗時跳轉的頁面
  • <forward name="simple">:Action 中 mapping.findForward("simple") 對應的目標頁
  • message-resources parameter:屬性文件路徑(src/struts/ErrorDescription.properties → "struts.ErrorDescription")

運行測試

訪問 https://localhost:8080/samples/simpleValidation.jsp:

圖1:初始界面

不輸入內容點擊提交:

圖2:驗證失敗顯示錯誤信息

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