歡迎您光臨本站 註冊首頁

Struts1.x系列教程(2):簡單的數據驗證

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

簡單驗證從本質上說就是在服務端來驗證客戶端提交的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方法的定義如下:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)

當客戶端向服務端提交form后,Servlet引擎通過ActionForm的子類的對象實例裝載form中的數據,然後再調用validate方法進行驗證.validate方法返回了一個ActionErrors對象.這個對象相當於一個Map,如果ActionErrors中沒有錯誤信息,Servlet引擎就認為form中的數據是正確的,這時服務端程序就會繼續執行.如果ActionErrors中有錯誤信息,程序就會跳轉到指定的錯誤頁面.下面讓我們通過一個完整的例子來演示一下如何通過validate方法來驗證form中的數據.實現這個例子需要如下五步:

「第1步」建立JSP頁面

在這一步將建立一個叫simpleValidation.jsp的頁面,這個JSP頁面用於採集用戶的輸入信息.在<samples工程目錄>中建立一個simpleValidation.jsp文件,並編寫如下的代碼:

<%@ 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>

在啟動Tomcat后,在IE的地址欄中輸入如下的URL:

http://localhost:8080/samples/simpleValidation.jsp

當通過上面的URL訪問simpleValidation.jsp時,並不能正確顯示用戶信息採集界面.原因是<html:form>標籤使用了一個simpleValidation,當JSP轉換成Servlet時,這個動作必須在struts-config.xml文件中正確定義,否則將拋出一個javax.servlet.jsp.JspException異常.

「第2步」建立simpleValidation動作

由於本例的著重點是簡單驗證,因此,simpleValidation動作並不需要處理更多的工作.一個動作對應於一個動作類,這個動作類一般是org.apache.struts.action.Action類的子類.simpleValidation動作只做如下兩項工作:

1. 設置驗證成功后,在目標頁中顯示的信息字元串(保存在request的屬性中).

2. 跳轉到目標頁.

simpleValidation動作對應的動作類是SimpleValidationAction,在<samples工程目錄>"src"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頁)
}
}

在編寫SimpleValidationAction類時應注意如下八點:

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中需要使用<html:errors>標籤顯示錯誤信息.

8. Struts實際上是將ActionErrors對象以org.apache.struts.action.ERROR作為鍵值保存在了request的屬性中.因此,<html:errors>標籤實際上是從request的屬性中獲得的錯誤信息描述.如我們也可以通過如下的Java代碼來獲得produceID屬性的錯誤描述信息:

<%
java
.util.Iterator<org.apache.struts.action.ActionMessage> it =
((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));
%>

「第4步」建立Java屬性文件

Java屬性文件相當於資源文件,以key = value形式保存了在程序中需要的字元串信息.Java屬性文件的擴展名為properties.在<samples工程目錄>"src目錄中建立一個struts目錄,在struts目錄中建立一個ErrorDescription.properties文件,並輸入如下的內容:

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文件

在本例中需要配置struts-config.xml文件的三個標籤:<form-bean>、<action>和<message-resources>.

1. 配置<form-bean>標籤

這個標籤用來定義ActionForm.在<form-beans>標籤中加入如下所示的<form-bean>標籤:

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

2. 配置<action>標籤

這個標籤用來定義Struts中的動作類.在<action-mappings>標籤中加入如下所示的<action>標籤:

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

<action>標籤中的屬性含義描述如下:

1. name:表示ActionForm的名稱.也就是<form-bean>標籤中的name屬性的值.

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類的全名.

5. input:表示如果客戶端提交的數據未通過簡單驗證后要跳轉到的頁面,也就是在

SimpleValidationForm類的validate方法中返回的ActionErrors對象中含有錯誤描述信息.Struts會自動跳轉到input屬性所指的JSP頁面.

<action>標籤中的子標籤<forward>定義了可以在動作類(在本例中就是SimpleValidationAction類)中讀取的forward頁的URL.

2. 配置<message-resources>標籤

這個標籤用來定義程序中所使用的屬性文件.在struts-config.xml文件的<struts-config>根節點中加入如下內容:

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

其中parameter屬性表示屬性文件的路徑,在本例中屬性文件ErrorDescription.properties位於struts目錄中,因此,parameter屬性的值為struts.ErrorDescription.擴展名properties不用寫.其中「.」也可以使用「/」或「"」代替.

下面我們測試一下這個例子程序.啟動Tomcat,然後在IE中輸入如下的URL:

http://localhost:8080/samples/simpleValidation.jsp

訪問上面的URL后的界面如圖1所示.

圖1

在不輸入任何信息的情況下,點擊「確定」按鈕后的界面如圖2所示.

圖2


[火星人 ] Struts1.x系列教程(2):簡單的數據驗證已經有730次圍觀

http://coctec.com/docs/java/show-post-61856.html