ITEEDU

第五章Struts 高级特性

5.1 验证

仅当在下列情况下才会在表单bean 中对用户输入进行验证:
 表单bean 覆盖超类的验证方法
 Struts 配置文件中的<action>元素的验证属性显式地或者缺省设置为TRUE。表单bean 没有关于应用程序的业务逻辑的信息;因此该bean 提供的验证仅限于一些相对简单的问题,例如,用户是否在每个必填字段中都输入了数据?
Struts 框架的各种部件使得可以进行验证Struts 配置文件中的以下<action>子元素将导致使用表单bean registerForm:

<action path=“/register”
	type=“strutsEGL.RegisterAction”
	name=“registerForm”
	input=“/register.jsp”
	scope=“request”
	<forward name=“success”path=“/home.do”/>
	<forward name=“failure”path=“/register.jsp”/>
</action>
    

如果缺少验证属性,则意味着当ActionServlet 接收到来自HTML 表单对 “/register”的请求时,ActionServlet 将在接收用户数据的表单bean 中调用验证方 法。此验证在ActionServlet 访问操作类之前进行。如果丢失了该方法,不会发 生任何错误,在该情况下,验证总是会成功。
 如果发生了错误,则表单bean 的验证方法将举例说明错误类并将错误条目添加 至该类。registerForm 的验证方法的一个子集为如下所示:

 ActionErrors errors=new ActionErrors();
    If (username= =unll║username.equals(“”))
    {
    errors.add(“register”,
    newActionError(“error. Register.username”));
    }
    if (openingBalance<0.01)
    {
    errors.add(“register”,
    newActionError(“error. register. balance”));
    }
    return errors;

errors.add 方法包括两个参数:
property
用来标识错误类别的Java 字符串。
如果想要在特定的输入字段或输入字段的子集发生错误时标识该错误,则指定属性值。例如,指定诸如“username”之类的值的优点在于:报告了错误的JSP 中,可以在屏幕上靠近发生错误的字段的位置显示有关特定HTML 字段的错误消息,但是,要指示所有错误都属于同一类别,可以对属
性参数指定以下常量:
ActionErrors.GLOBAL_ERROR
error
包含从属性文件派生的“键-字符串”对的键的ActionError 对象。当配置ActionError 对象时,最多可以包括要代入字符串中用来替代{0}、
{1}等的四个值。
如果从验证方法返回了错误,则ActionServlet 指导对在<action>元素的输入属性中指定的对象或JSP 进行处理;在本例中,将处理register.jsp.
 JSP register.jsp. 包括用于显示从验证方法派生的任何错误消息的以下标记:
<html:errors/>
如果在未发生输入错误的情况下调用JSP,则该标记不显示任何内容,而在JSP 中将继续进行处理。但是,如果因发生验证故障而调用了JSP,则为用户显示的内容将受到属性文件中是否包括下列键的影响:
― errors.header,它导致在所有错误消息前面显示一个字符串;或者
― errors.footer,它导致在所有错误消息后面显示一个字符串;或者
― errors.hiader,和errors.footer 两者
例如,在ApplicationResources.properties 中,errors.header 和errors.footer 的“键-字符串”对以及先前显示的这两个消息键为如下所示,它们各自都在单独的一行上(但是分成了多行显示以便于您复查):

errors.header=
<p class=“errors”>
	The Action failed because of the following  reason(s):
	<ul class=“errors”>
		error.register.username=<li>you must enter  a User ID.
			error.register.balance=
			<li>Your account must start with a  positive balance.
			Errors.footer=</ul></p>

如果在注册时用户对用户名输入了空白,对余额输入零,则用户将接收到一个包括两个错误的列表的屏幕:
The Action failed because of the following reason(s):
o You must enter a User ID.
o Your account must start with a positive balance.
可以为标记<html:errors/>指定属性以支持国际化或者只显示有关指定了给定属性值的错误的信息。通过使用相异属性值,可以在相邻的不同字段中显示每条错误消息而不是将所有错误置于单个列表中。