快捷搜索:

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措施的定义如下:

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页面用于采集用户的输入信息。在中建立一个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时,并不能精确显示用户信息采集界面。缘故原由是标签应用了一个simpleValidation,当JSP转换成Servlet时,这个动作必须在struts-config.xml文件中精确定义,否则将抛出一个javax.servlet.jsp.JspException非常。

「第2步」建立simpleValidation动作

因为本例的着重点是简单验证,是以,simpleValidation动作并不必要处置惩罚更多的事情。一个动作对应于一个动作类,这个动作类一样平常是org.apache.struts.action.Action类的子类。simpleValidation动作只做如下两项事情:

1.设置验证成功后,在目标页中显示的信息字符串(保存在request的属性中)。

2.跳转到目标页。

simpleValidation动作对应的动作类是SimpleValidationAction,在"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中必要应用标签显示差错信息。

8. Struts实际上是将ActionErrors工具以org.apache.struts.action.ERROR作为键值保存在了request的属性中。是以,标签实际上是从request的属性中得到的差错信息描述。如我们也可以经由过程如下的Java代码来得到produceID属性的差错描述信息:

%

java.util.Iterator> 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.在"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文件的三个标签:、和.

1. 设置设置设备摆设摆设标签

这个标签用来定义ActionForm.在标签中加入如下所示的标签:

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

2. 设置设置设备摆设摆设标签

这个标签用来定义Struts中的动作类。在标签中加入如下所示的标签:

action name="simpleValidationForm" path="/simpleValidation" scope="request" type="action.SimpleValidationAction"

input="simpleValidation.jsp">

forward name="simple" path="simpleValidation.jsp" />

action>

标签中的属性含义描述如下:

1.name:表示ActionForm的名称。也便是标签中的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页面。

标签中的子标签定义了可以在动作类(在本例中便是SimpleValidationAction类)中读取的forward页的URL.

2.设置设置设备摆设摆设标签

这个标签用来定义法度榜样中所应用的属性文件。在struts-config.xml文件的根节点中加入如下内容:

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

您可能还会对下面的文章感兴趣: