佛山电信要求对寻宝的首页全新改版,当中出现了一个看上去不大,但有点头痛的问题。
从寻宝的首页里登录,如果验证码错误或者用户名密码错误,出现了原来互动平台的登录页面,非常不好看,这个问题必须着手改进。
从用户的角度来看这个流程,如果登录的时候不小心输错了验证码或用户名密码,最好是返回原来的页面,并提示出错信息;或者返回到一个专门的出错提示页面,让用户重新输入用户名和密码来登录。
这两种选择的用户体验应该都差不多,但比较喜欢第一种选择,而且觉得没什么难度。以用户输入了错误的验证码举例,当用户输入了错误的验证码并提交后,验证码检验器检验到了错误的验证码,并添加了一个FieldError到Action里。我们配置了一个名为WorkflowIntercepter的拦截器,这个拦截器捕捉到了FieldError后,自动将Action停止执行,并返回一个名为input的Result。
一开始想得很轻松,因为webwork有一个ChainingIntercepter和ChainResult的组合,可以ActionContext里的属性从前一个Action复制到另一个Action,理想情况下,FiledError亦会同进复制到了后面的那个Action里,然后在后面的Action里将提示信息alter出来,这样就轻松实现了流程的控制了。
着手试了一下,非常遗憾的是这方法是行不通的,出错信息并没有显示出来。看了一下webwork的源代码,原来ChainResult只是复制了ActionContext里的值栈和各种http请求的参数,并没有复制Action里的各种错误信息。
看来这里是关键了,首先试过创建了一个继承ChainResult的Result,在Action执行完后复制错误信息,从Log来看实际结果跟想法是一样,但从页面里却读不到错误信息的值,估计Action执行后再读取这个方法行不通。
继承的方法行不通,唯有将ChainResult的代码复制出来,然后修改一下它的代码,在执行另一个Action前复制错误信息。从以下的Log里可以看出执行流程。
12:21:57,203 INFO ActionChainWrapResult:139 - 原action:promotLoginFs
12:21:57,203 INFO ActionChainWrapResult:140 - 原action错误信息:用户不存在或密码有误!
12:21:57,218 INFO ActionChainWrapResult:151 - 后action:index
12:21:57,234 INFO ActionChainWrapResult:152 - 后action错误信息设值前:
12:21:57,234 INFO ActionChainWrapResult:156 - 后action错误信息设值后:用户不存在或密码有误!
最后,实现一个Intercepter,将ChainingIntercepter和WorkflowIntercepter组合起来,在触发Action错误时返回input的Result,否则继续执行Chain链。
分享到:
相关推荐
WebWork虽然现在已经被Struts2和Spring MVC等更现代的框架取代,但其设计理念和实现方式对于理解现代Web框架的演变过程具有很高的参考价值。如果你是Java Web开发的爱好者,深入研究WebWork源码无疑会增强你的技能,...
本文详细介绍了WebWork框架中`WebWork_Result`配置文件的使用方法,重点讲解了`dispatcher`和`redirect`两种类型的`result`配置及其区别。通过这些知识点的学习,可以帮助开发者更好地掌握WebWork框架的核心机制,...
此外,查看`displaytag-1.0`源码可以帮助理解如何将一个标签库集成到Web应用程序中,以及它如何与WebWork框架协同工作,优化表格显示和交互。 总的来说,WebWork框架和Display Tag是Web开发中的两个重要工具,它们...
本文将深入分析四个主流的开源工作流引擎:Shark、osworkflow、jbpm和jflow。 首先,Shark是Enhydra项目的一部分,Enhydra是一个涵盖广泛的技术栈,包括J2EE应用服务器、对象/关系映射工具以及工作流引擎等。Shark...
1. **WebWork基础**:WebWork的核心概念,如Action、Interceptors(拦截器)、Results和Parameters等,以及它们如何协同工作来实现业务逻辑和视图呈现的分离。理解这些基础概念是掌握WebWork的关键。 2. **MVC模式*...
深入理解WebWork源码,可以帮助开发者更好地设计和实现自己的MVC框架,或者优化现有的Web应用程序。 Tomcat源码解析: Tomcat作为Servlet容器,其源码中包含了对Servlet和JSP规范的实现。主要的组件有Coyote(处理...
在 WebWork 中,配置是至关重要的,因为它定义了框架如何工作以及如何与应用交互。以下是 WebWork 配置的一些核心方面: 1. **web.xml** 文件:这是每个 Java Web 应用的标准部署描述符,用于配置Servlet过滤器和...
在"webwork-1.4-src.zip"这个压缩包中,包含了WebWork1.4的源代码,这对于学习和理解WebWork的工作原理以及进行定制开发非常有帮助。 1. **MVC模式**:WebWork1.4遵循MVC架构,将应用程序分为模型、视图和控制器三...
工作流源码大全是IT行业中一个重要的学习资源集合,它涵盖了多种编程语言和技术,用于实现工作流管理系统。工作流是企业信息化建设中的关键部分,它能够自动化处理一系列业务流程,如审批、协作和任务分配。这里,...
WebWork通过Action类实现了控制器的功能,允许开发者创建自定义的业务操作。 2. **Action和ActionForm** 在WebWork中,Action是处理用户请求的核心组件。它接收请求参数,执行业务逻辑,并根据结果返回一个Result...
这样的合并工作通常需要对两个框架的内部实现有深入的理解,包括它们的类加载机制、标签库的注册和解析流程等。 在使用这个无冲突版的jar包时,开发者可以安心地在JSP页面中使用Struts2的`s:select`标签,无需担心...
WebWork的核心设计理念是将业务逻辑、数据模型和用户界面分离,使得开发者可以专注于各自领域的实现。WebWork 使用动作(Action)作为控制器,负责处理用户请求,调用业务逻辑,并将结果传递给视图进行展示。它还...
WebWork是一个轻量级的MVC框架,它通过使用动作(Action)和结果(Result)的概念来处理用户请求,并且提供了强大的数据绑定、类型转换、异常处理和国际化支持。WebWork 2.2.2是该框架的一个稳定版本,它引入了许多...
WebWork提供了多种方式来实现这个逻辑,比如使用自定义的Validator或Interceptor。开发者可以编写代码检查用户名和密码的有效性,可能还包括检查账户状态(如是否已禁用或过期)。 5. **结果处理**:如果验证成功,...
Webwork2作为一个早期的Java Web框架,虽然现在已被Struts2所替代,但其设计理念和机制对理解现代MVC框架的工作原理仍然有价值。学习Webwork2可以帮助开发者更好地理解和掌握MVC架构,以及拦截器、配置文件等核心...
通过这个简单的HelloWorld示例,你可以初步了解WebWork的基本工作原理和结构。随着对WebWork的深入学习,你将能够利用其强大的功能,如拦截器、国际化、数据绑定、AOP等,来构建复杂的Web应用程序。
5. 国际化与本地化:WebWork2.0提供简单易用的国际化和本地化功能,方便不同语言环境的应用开发。 三、WebWork2.0配置 WebWork2.0的配置主要集中在`webwork.xml`文件中,包括Action配置、Interceptor配置、过滤器...
8. **异常处理(Exception Handling)**:Webwork2提供了优雅的异常处理机制,允许开发者自定义错误页面和处理策略,确保应用程序在出现异常时仍能提供用户友好的反馈。 9. **国际化(Internationalization)**:...