【原創】Struts1.x系列教程(2):簡單的資料驗證
簡單驗證從本質上說就是在服務端來驗證客戶端提交的form中的資料。這種驗證只是對form中的資料規則進行檢查,如必須輸入使用者ID,價格不能小於0或是對email格式的驗證。在這個驗證過程中,並不需要訪問資料庫。因此,簡單驗證需要在使用者提交form後,並且在伺服器處理form中的資料之前進行。
在進行完簡單驗證後,如果form中的資料不合法,程式就會forward到指定的JSP頁(一般是包含form的頁面),並顯示相應的錯誤資訊。如果form中的資料完全正確,程式就會繼續執行。
一、在validate方法中進行簡單驗證
在上一篇文章中我們知道,Struts1.x通過ActionForm的子類來封裝了客戶端提交的form中的資料。而服務端程式只需要通過ActionForm的子類的物件例項就可以訪問form中的資料,而如果不使用ActionForm類,就必須通過request物件來獲得form中的資料。通過這種封裝機制可以使程式碼更容易理解。然而,ActionForm類不僅可以封裝form中的資料,還可以通過ActionForm類的validate方法來驗證form中的資料。validate方法的定義如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
當客戶端向服務端提交form後,Servlet引擎首先通過ActionForm的子類的物件例項裝載form中的資料,然後再呼叫validate方法進行驗證。validate方法返回了一個ActionErrors物件。這個物件相當於一個Map,如果ActionErrors中沒有錯誤資訊,Servlet引擎就認為form中的資料是正確的,這時服務端程式就會繼續執行。如果ActionErrors中有錯誤資訊,程式就會跳轉到指定的錯誤頁面。下面讓我們通過一個完整的例子來演示一下如何通過validate方法來驗證form中的資料。實現這個例子需要如下五步: 在這一步將建立一個叫simpleValidation.jsp的頁面,這個JSP頁面用於採集使用者的輸入資訊。在
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
當通過上面的URL訪問simpleValidation.jsp時,並不能正確顯示使用者資訊採集介面。原因是 由於本例的著重點是簡單驗證,因此,simpleValidation動作並不需要處理更多的工作。一個動作對應於一個動作類,這個動作類一般是org.apache.struts.action.Action類的子類。simpleValidation動作只做如下兩項工作: 1. 設定驗證成功後,在目標頁中顯示的資訊字串(儲存在request的屬性中)。 2.
跳轉到目標頁。 simpleValidation動作對應的動作類是SimpleValidationAction,在
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
【第3步】建立ActionForm類
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
在編寫SimpleValidationAction類時應注意如下八點:
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
【第4步】建立Java屬性檔案 Java屬性檔案相當於資原始檔,以key = value形式儲存了在程式中需要的字串資訊。Java屬性檔案的副檔名為properties。在
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
【第5步】配置struts-config.xml檔案 這個標籤用來定義ActionForm。在
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
1.
name:表示ActionForm的名稱。也就是 2. path:表示Struts動作,必須以“/”開頭。 3. scope:表示ActionForm類的物件例項(在本例中是SimpleValidationForm類的對 象例項)儲存的範圍。這個屬性值只能取request和session。預設值是session。如果scope的值為request,表示將SimpleValidationForm類的物件例項以simpleValidationForm作為鍵值儲存到了request的屬性中。如果scope的值為session,表示不將SimpleValidationForm類的物件例項儲存到request的屬性中。但不管scope的值是request還是session。Struts都會將SimpleValidationForm類的物件例項儲存到session的屬性中。 4. type:表示SimpleValidationAction類的全名。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-538144/,如需轉載,請註明出處,否則將追究法律責任。
【第1步】建立JSP頁面
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> @ page pageEncoding="GBK"%>
@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>註冊資訊(測試簡單驗證)title>
<style type="text/css">
.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>
http://localhost:8080/samples/simpleValidation.jsp
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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頁)
}
}
在這一步我們來建立一個用於接收有戶的提交資訊的ActionForm類:SimpleValidationForm。這個類從
org.apache.struts.action.ActionForm類繼承。在
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> package actionform;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
public class SimpleValidationForm extends ActionForm
{
// 以下四個變數分別對應於simpleValidation.jsp中的四個文字框中的值。
private String user;
private String password;
private String password1;
private String email;
public String getUser()
{
return user;
}
public void setUser(String user)
{
this.user = user;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPassword1()
{
return password1;
}
public void setPassword1(String password1)
{
this.password1 = password1;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
// 開始驗證使用者提交的資訊
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
ActionErrors error = new ActionErrors();
if (user.equals("")) // 必須輸入使用者名稱
error.add("errorUser", new ActionMessage("error.user.blank"));
if (password.equals("")) // 必須輸入密碼
error.add("errorPassword", new ActionMessage("error.password.blank"));
else if (!password.equals(password1)) // 兩個登入密碼必須一致
error.add("errorPassword1", new ActionMessage("error.password1.confirmation"));
if (email.equals("")) // 必須輸入email
error.add("errorEmail", new ActionMessage("error.email.blank"));
else if (!email.matches("\\w+(\\.\\w+)*@\\w+(\\.\\w+)+")) // 驗證email的格式是否正確
error.add("errorEmail", new ActionMessage("error.email.invalid"));
// 返回錯誤資訊,如果error中沒有錯誤資訊,
// 就會呼叫SimpleValidationAction類的物件例項來執行execute方法。
return error;
}
}
1. 要想在ActionForm類中進行驗證,必須在ActionForm類的子類中覆蓋validate方法。
2. validate方法在ActionForm類的物件例項裝載完使用者提交的資料後呼叫,因此,在呼叫validate方法時,ActionForm類的屬性值已經是使用者提交的資訊了。所以可以直接使用這些屬性值進行驗證。
3. 在validate方法中驗證使用者提交的資料時,要使用ActionErrors類的例項物件返回錯誤資訊
4. ActionErrors類的構造方法的第二個參是一個ActionMessage類的物件例項,而不是錯誤描述資訊。
5.ActionMessage類的構造方法的引數並不是錯誤描述資訊,而是錯誤描述資訊的key,具體的資訊在Java屬性檔案中(將在下一步實現)。
6. 使用ActionForm的屬性可以非常好地驗證字串型別,但對於其他的資料型別(如整型)的某些驗證卻不太適合。如當使用者提交資料時,本該提交一個整數,但使用者卻提交了一個非整數資訊。對於這種情況,在ActionForm類的物件例項中這個使用者提交的資料的值為0。雖然使用ActionForm類的屬性無法準確驗證這種情況,但我們可以使用validate方法的第二個引數request的getParameter方法直接獲得客戶端提交的資料來進行驗證。
7. 如果ActionErrors物件中有錯誤資訊,在JSP中需要使用
8.
Struts實際上是將ActionErrors物件以org.apache.struts.action.ERROR作為鍵值儲存在了request的
屬性中。因此,
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> <%
java.util.Iterator
((org.apache.struts.action.ActionErrors)request
.getAttribute("org.apache.struts.action.ERROR")).get("productID");
out.println(((org.apache.struts.util.PropertyMessageResources )request
.getAttribute("org.apache.struts.action.MESSAGE")).getMessage("error.productID.blank",null));
%>
ErrorDescription.properties
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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.
在本例中需要配置struts-config.xml檔案的三個標籤:
1. 配置
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><form-bean name="simpleValidationForm" type="actionform.SimpleValidationForm" />
這個標籤用來定義Struts中的動作類。在
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> <action name="simpleValidationForm" path="/simpleValidation" scope="request" type="action.SimpleValidationAction"
input="simpleValidation.jsp">
<forward name="simple" path="simpleValidation.jsp" />
action>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
相關文章
- 【原創】Struts1.x系列教程(12):Validator驗證框架的內建標準驗證框架
- 【原創】Struts1.x系列教程(8):上傳單個檔案
- 【原創】Struts1.x系列教程(14):動態FormORM
- 【原創】Struts1.x系列教程(6):Bean標籤庫Bean
- 【原創】Struts1.x系列教程(17):包含和轉入Web資源Web
- 【原創】Struts1.x系列教程(7):Logic標籤庫
- 【原創】Struts1.x系列教程(4):標籤庫概述與安裝
- 【原創】Struts1.x系列教程(18):使用DispatchAction類呼叫多個Action方法
- 表單驗證教程簡介
- 【原創】Struts1.x系列教程(1)-B:用MyEclipse開發第一個Struts程式Eclipse
- Oracle23ai 資料庫的簡單驗證OracleAI資料庫
- 【原創】Struts1.x系列教程(15):使用DownloadAction類統計檔案下載次數
- 表單資料驗證
- 有關資料驗證的原則
- [原創]注入技術系列:一個批量驗證DLL劫持的工具
- [原創]注入技術系列:一個批次驗證DLL劫持的工具
- Struts2教程4:使用validate方法驗證資料
- Struts2教程5:使用Validation框架驗證資料框架
- 利用js編寫一個簡單的html表單驗證,驗證通過時提交資料(附原始碼)JSHTML原始碼
- jquery驗證簡單示例jQuery
- 【原創】簡單替換加密加密
- react+antd系列之Form表單(2):格式限制驗證ReactORM
- [系列] Gin框架 - 資料繫結和驗證框架
- 一種簡單好用的Vue表單驗證Vue
- 簡單的數字驗證碼破解
- 一個簡單的驗證碼工具
- 一個oracle bug的簡單驗證Oracle
- angular中的表單資料自定義驗證Angular
- YII2檔案上傳驗證,簡單封裝封裝
- ASP資料庫簡單操作教程資料庫
- Winhex簡單資料恢復與取證及實驗一總結資料恢復
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- Swift 超簡單的驗證框架ValidateSwiftSwift框架
- 超簡單的PHP驗證碼識別PHP
- 簡單API介面簽名驗證API
- 用onsubmit做簡單表單驗證(37)MIT
- 自定義一個簡單的資料模型驗證器類,可用於各類驗證場景,待後續完善模型
- Javascript使用正則驗證身份證號(簡單)JavaScript