`
isiqi
  • 浏览: 16617476 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Struts 页面流(Page flow)表单验证

阅读更多

创建Web应用的过程中,验证用户在HTML表单中的输入是最常见的一个问题。用户输入数据必须被验证从而保证进行业务处理之前数据是正确的。输入的表单数据可能用于创建或更新数据库条目、调用Web服务、或作为业务过程的输入。基于目前由Struts提供的表单验证框架,页面流提供了一种简单易用的服务端验证方式。
页面流验证提供以下功能:
· 用户表单输入的服务端验证
· 用待验证的表单bean封装验证逻辑
· 验证失败时自动导航到输入页面
· 内置消息包支持,方便进行国际化
本文假定读者熟悉页面流及JSP。本文将介绍创建表单bean和验证页面的基本步骤。如果发生验证错误用户将会得到通知,从而可以修正它们;动作方法被调用时可以认为数据是正确的。

Request生命周期及验证
表单验证针对的是已提交表单bean中的内容。通过JSP页面的<netui:form> 标签的动作属性,该bean被间接选中;表单bean与指定动作相关联。表单bean继承自com.bea.wlw.netui.pageflow.FormData。为了验证表单bean,开发人员需要重载validate() 方法并提供验证逻辑。
图1演示了request的生命周期以及验证是如何发生的。当Strut的控制器接收到请求时,它将请求传递给页面流RequestProcessor。请求处理器的processPopulate 方法首先构造一个新的表单bean,其中含有来自请求的所有数据条目。此步骤将会创建FormData。然后请求处理器检查是否为动作激活了表单验证。如果验证被激活,将会针对该表单bean调用validate()方法。如果出现验证错误,控制权将交给一个输入页面,同时转交的还有用户输入的数据以及错误信息。如果没有发现错误,控制权将被传递给目标动作从而继续处理请求。
通过简单的五个步骤就可以在页面流中进行验证。下面详细解释每个步骤。
步骤1——验证方法
验证用户输入的第一个步骤是在表单bean上创建validate()方法。该方法将会检查表单bean的属性,察看有没有用户输入错误。下面这个非常简单的表单bean定义了两个属性:name 和type。validate() 方法提供了对这些属性的验证。
public static class NameBean extends FormData
{
private String name;
private String type;
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return this.type;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
ActionErrorserrors = new ActionErrors();
if (name == null || name.equals("")) {
errors.add("nameError",
new ActionError("NullNameError"));
} else {
if (!Character.isUpperCase(name.charAt(0))) {
errors.add("nameError",
new ActionError("UpperCaseNameError",name));
}
}
if (type == null || (!type.equals("bar") && !type.equals("foo"))) {
errors.add("typeError",
new ActionError("TypeError",type));
}
if (!errors.empty()) {
request.setAttribute("errorNotSet",new Boolean(false));
}
return errors;
}
validate() 方法返回Struts的ActionErrors 对象,其中包含任何可能发生的错误信息。当该方法被调用时,它接收Struts ActionMapping 结构和HttpServletRequest。如果方法内部发生错误,Struts ActionError 类将会捕获错误信息。

validate() 方法所做的第一件事就是创建用来返回验证错误的ActionErrors 对象。
ActionErrors errors = new ActionErrors();
如果返回一个非空ActionErrors 对象,该方法会将错误通知给请求处理器。如果没有ActionError添加进来,ActionErrors将是空的。该方法可能返回空ActionErrors ,也可能返回null来表示没有错误发生。
在本例中,如果发生错误将会创建一个新的ActionError 对象并将其添加到ActionErrors 中:
errors.add("typeError", new ActionError("TypeError",type));
我们将在例子中创建一个含有名为"typeError"的属性的新错误。<netui:error> 标签使用名称来判断应该报告哪个错误。新创建的ActionError 含有一个主键 "TypeError"。主键是在消息包中查找错误显示信息要用到的ID。除此之外,我们还会传递变量type以便在信息创建时进行文本替换。
步骤2——在动作中打开验证
只有为动作开启了验证功能,validate() 方法才能被调用。通过添加一个validation-error-page 属性到@jfp:action 注解即可开启验证功能:
/**
* @jpf:action validation-error-page="index.jsp"
* @jpf:forward name="success" path="results.jsp"
*/
protected Forward processNameBean(NameBean form)
{
HttpServletRequest req = getRequest();
req.setAttribute("Form",form);
return new Forward("success"); }
既可以手工也可以通过动作源码视图的属性编辑窗口来定义注解。

步骤3——创建错误消息文本
错误消息文本是从消息包中查找出来的。消息包被放置在WEB-INF/classes子目录下。在本例中,我们创建Validation.properties 文件并将其放在 WEB-INF/classes/message 目录
Validation.properties 中包含那些将会显示在<netui:error> 或 <netui:errors> 标签中的文本。该属性文件包含以下条目:
rrors.header=<ul>
errors.footer=</u>
errors.prefix=<li>
errors.suffix</li>
NullNameError=The name field must not be null.
UpperCaseNameError=The name <b>'{0}'</b> must begin
with an upper case letter.
TypeError=The type <b>'{0}'</b> must be the value 'foo' or 'bar'

在例子中,我们通过以下语句创建一个 ActionError :
ActionError("TypeError",type));
字符串“TypeError”用于消息的查找:
TypeError=The type <b>'{0}'</b> must be the value 'foo' or 'bar'
在运行时刻,变量type 替换'{0}'处从而生成报告给用户的完整文本。

步骤4—— 将消息文件绑定到页面流
消息文件Validation.properties 需要绑定到页面流,这样才能在报告消息给用户之前进行消息的查找。可以通过页面流的一个注解来进行绑定。
/* @jpf:controller
* @jpf:message-resources resources="messages.Validation"
*/
public class Controller extends PageFlowController
{
@jpf:message-resources注解声明页面流使用messages.Validation 属性文件。既可以在源代码中直接设置该注解,也可以在源码视图页面流属性编辑窗口下面的消息资源列表区域中设置。
消息资源名称是查找消息包需要用到的classpath条目。本例中,因为WEB-INF/classes 在classpath中,所以messages.Validation能够被找到。它的实际文件名是WEB-INF/classes/message/Validation.properties。

注意:Java将会缓存那些访问过的消息包。如果在开发过程中修改了.properties 文件,可以通过修改页面流文件并重启测试浏览器、或停止并重启服务来清空缓存。

步骤5——在JSP页面中报告错误

有两个页面流标签用于报告验证过程中发生的错误。<netui:error> 标签根据value 属性进行错误报告。它通常被用在输入字段后面直接报告该字段的错误。<netui:errors> 标签将会报告页面中的所有错误。下面的JSP代码片断演示了一个<netui:form>例子,它负责提交NameBean表单bean。它使用<netui:error> 标签在用户输入字段之后报告错误。除此之外,通过<netui:errors> 标签,其它错误被报告在文档的底部。
<h4>Name Input Form</h4>
<netui:form action="processNameBean" focus="">
<table>
<tr>
<td><netui:label value="Name:">
</netui:label></td>
<td><netui:textbox dataSource="{actionForm.name}">
</netui:textBox></td>
<td><span style="color:#cc0000;">
<netui:error value="nameError"/></span></td>
</tr>
<tr>
<td><netui:label value="Type:"/></td>
<td><netui:textBox dataSource="{actionForm.type}"/></td>
<td><span style="color:#cc0000;">
<netui:error value="typeError"/></span></td>
</tr>
</table>
<netui:button value="Submit Form"></netui:button>
</netui:form>
<netui-template:visible visibility="{request.errorNotSet}"
negate="true" >
<hr />
<span style="color:#cc0000;">
<netui:errors><br /></netui:errors>
</span>
</netui-template:visible>
<netui:errors> 标签有四个可以定义在消息包中的特殊属性:errors.header, errors.footer, errors.prefix, errors.suffi,利用这些属性可以在显示的消息周围进行格式设定。在本例中,错误被显示在一个未排序的列表中。而且,<netui:error> 标签允许error.prefix 和error.suffix 定义标记性的标签。本例中没有演示这一功能。

结果
用户在表单中输入非法数据后验证错误被返回,然后请求处理器定向到index.jsp页面,错误信息被显示在字段之后以及表单下面。错误表单的内容全部被返回,这样用户可以只修改那些出错的字段。

结论

服务端的用户输入验证需要经历五个步骤。首先在表单bean中创建一个validate() 方法,该方法将会验证用户输入并报告错误。第二步,必须在接收表单的动作上设置validation-error-page 符号才能激活表单验证。第三步,添加错误文本到消息包中。第四步,借助消息资源注解,消息包被绑定到页面流上。最后,在JSP中添加<netui:error> 或 <netui:errors> 标签,它们将会显示错误文本。页面流框架会管理所有的验证调用,并在错误发生后将控制权路由到输入页面,否则路由到目标动作。

分享到:
评论

相关推荐

    整合了struts2 jquery的formValidator表单验证的页面代码

    在"整合了struts2 jquery的formValidator表单验证的页面代码"这个项目中,开发者可能采用了以下步骤: 1. **引入依赖**:首先,需要在HTML页面中引入Struts2的相关JSP标签库,同时引入jQuery库和formValidator的...

    struts的表单验证

    在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...

    struts2官方例子7-表单验证 xml形式的验证

    最后,在JSP页面上,我们可以使用Struts2的标签库来显示错误消息,如`&lt;s:fielderror&gt;`,这样当验证失败时,用户就能看到相应的错误提示。 总结起来,Struts2的XML表单验证是通过创建XML文件定义验证规则,然后在...

    关于struts表单验证

    本文将详细讲解Struts中的表单验证机制,包括ActionForm Bean的使用、validate()方法和reset()方法,以及如何处理验证错误。 首先,ActionForm Bean是Struts框架中用于存储和管理用户输入数据的Java对象。它需要...

    struts1使用actionform实现表单验证

    如果ActionForm的验证失败,Action的execute方法不会被执行,而是直接跳转回原来的表单页面,此时表单页面会显示验证错误信息。 7. **国际化支持** 为了支持多语言,错误消息通常会存储在资源文件(如messages....

    Struts2表单验证

    Struts2是一个流行的Java web开发框架,其在处理用户表单数据时提供了强大的验证功能,确保输入的数据符合预期的格式和规则。本文将深入探讨Struts2的表单验证机制。 首先,Struts2的输入验证分为两种方式:手动...

    Struts动态表单验证

    Struts动态表单验证是Java Web开发中一个关键的实践,尤其在构建MVC(Model-View-Controller)架构的应用程序时。Struts框架提供了一种有效的方法来处理用户输入并确保数据的完整性和安全性。在这个主题中,我们将...

    Struts2极速表单验证框架(注解)

    验证失败时,Struts2会将错误信息存入Action的`fieldErrors`或`globalErrors`,然后可以在JSP页面中遍历这些错误信息,展示给用户。 ### 9. 总结 Struts2的注解式表单验证为开发者提供了高效且易于维护的方式,使得...

    struts结合js的表单验证

    ### Struts 结合 JS 的表单验证 在 Web 开发中,前端表单验证是非常重要的一个环节,它能够有效提高用户体验并减少服务器端的压力。本文将详细介绍如何在 Struts2 框架中利用 JavaScript(JS)进行客户端表单验证,...

    myeclipse 6.5 + struts2 +ajax 实现表单注册验证源码

    该标题提到的是使用MyEclipse 6.5集成开发环境,结合Struts2框架和Ajax技术来实现一个表单注册验证的源码项目。这涉及到Web开发中的几个关键点:MyEclipse作为开发工具,Struts2作为MVC框架,以及Ajax作为异步数据...

    struts2 表单验证验证信息显示位置及效果

    至于`client`这个文件,可能是博客作者提供的示例代码或资源,可能包含了Struts2表单验证的相关配置、Action类、JSP页面和资源文件等内容。深入研究这个文件,我们可以更具体地了解Struts2验证的实现细节,包括如何...

    Struts动态表单验证Demo视频

    总的来说,"Struts动态表单验证Demo视频"是学习Struts框架中动态表单验证功能的一个宝贵资源,对于Java Web开发者来说,掌握这一技能可以大大提高开发效率,减少因数据验证问题导致的bug。记得在观看过程中,结合源...

    struts表单验证讲解视频教程

    2. 错误处理:如果验证失败,Struts会将错误信息存储在ActionErrors或FieldErrors集合中,然后在JSP页面上显示给用户。 三、动态验证 Struts还支持动态验证,即在运行时根据用户角色或其他条件改变验证规则。这可以...

    Struts1.2动态表单验证

    Struts1.2提供了动态表单验证功能,使得开发者能够更灵活、高效地处理用户输入验证。 动态表单验证的核心思想是将验证逻辑与业务逻辑分离,通过配置文件来定义验证规则,而不是硬编码在Action类中。这增加了代码的...

    Struts1.2动态表单注册 验证实例(2)

    总的来说,这个实例涵盖了Struts1.2中的基础应用,包括Action、表单Bean、配置文件、验证框架和JSP页面的使用。通过学习和实践这个例子,开发者可以深入理解Struts的工作原理,以及如何利用它来构建功能丰富的Web...

    struts 1.2 ActionFrom表单验证

    如果验证失败,ActionForm会存储错误消息,然后转发回表单页面显示错误信息。 对于"spring_struts_21"这个文件名,我们可以推断这是一个结合Spring框架和Struts 1.2的示例项目。Spring和Struts 1.2可以协同工作,...

    struts2 表单验证 注册

    在Struts2中,表单验证是一个重要的功能,它确保了用户输入的数据符合我们设定的规则,从而提高应用程序的健壮性和用户体验。在注册场景中,表单验证尤为重要,因为它涉及到用户账户的安全性。 首先,让我们深入...

    struts2表单验证

    在Struts2中,表单验证是处理用户输入数据的重要部分,确保数据的完整性和正确性。下面将详细讨论Struts2中的表单验证及其相关知识点。 一、Struts2表单验证概述 Struts2的表单验证分为客户端验证和服务器端验证。...

    Struts2_极速表单验证框架使用说明书.pdf

    **知识点:Struts2极速表单验证框架** **1. 概述** Struts2极速表单验证框架是Struts Plus项目的一个子模块,旨在提高Struts2框架下的表单验证效率与便捷性。该框架由刘长炯(beansoft@126.com)创建,初始版本发布...

    struts7验证框架 struts7验证框架

    通过Struts的验证框架,开发者能够更方便地处理表单验证,无需在Action类中嵌入大量的验证逻辑,使得代码更加整洁,同时也提高了代码的可测试性和可维护性。此外,该框架还支持自定义验证器,以满足特定的业务需求。...

Global site tag (gtag.js) - Google Analytics