InfoQ

新闻

Spring Web Flow 2.0.0.RC1发布了,增加了对Ajax、JSF和安全的集成

作者 Slobojan, Donald and Grelle译者 宋玮 发布于 2008年4月23日 上午12时7分

社区
Java
主题
开放源代码,
Web框架
标签
Spring框架,
Spring Web Flow,
Grails,
Spring IDE,
JSF

InfoQ与Spring Web团队的Keith Donald和Jeremy Grelle就Web Flow 2.0.0.RC1的发布进行了交流,这是Web Flow下一个主要版本的第一个产品发布候选。Web Flow是对Spring MVC的一个扩展,用来在Web应用程序中实现流程

Web Flow 2.0中有什么新特性?

Web Flow 2中有很多重要的新特性,例如:

改良的Ajax

首先,Web Flow 2引入了Ajax事件处理能力。你只需像处理任何其它Web Flow事件一样来处理Ajax事件就可以了,在处理事件之后,你的流程可以请求刷新UI的特定片断或部分。你可以在我们的Spring Travel例子中看到对这种局部刷新的支持(当页面返回到查询结果表时,或者在UI上显示验证错误信息时都可以看到这种局部刷新)。

我们在对Ajax的支持上比较有意思的一点是,当客户端Javascript不可用时,我们进行了适当的处理。试着访问一下Spring Travel应用,并将Javascript关掉。这个应用程序依然能够工作。

因此我们的Ajax支持实际上包含了两个部分:Web Flow结合服务器端来检测可以使用Ajax的客户端并根据请求进行局部展现;客户端,用于提交Ajax请求并将响应片断与页面联系起来。我们所提供的客户端叫做“Spring Javascript”,这是Web Flow分发包中的新模块,建立在Dojo 1.1之上,对Ajax及改进增强等等提供了一个干净、一致的API。

与Spring MVC更深度集成

Spring MVC和Web Flow是互补的:Spring MVC是Web应用开发的基础平台,而Web Flow是一个Controller扩展,用来实现流程(也就是会话——conversations),它是跨多个请求的有状态的用户交互。

因此Web Flow 2加深了与流行的Spring MVC平台的集成。现在,在无状态Spring MVC @Controllers中调用Flows更加容易了,而且对于Flow的产出,现在也可以更方便地映射到Controller上。在充满“mvc”风味的Spring Travel参考应用中可以看到这一点,其中混合使用了@Controller和flow。在参考应用中,网站的“shop”或搜索部分使用的是无状态的@Controllers来实现的,提供了完整的可书签化(bookmarkability)能力,订房功能使用的是有状态的Web Flow,为每个窗口隔离了订房应用交易。配合得非常好。

重构并扩展了JSF集成

在Web Flow还是版本1的时候,你可能已经在“传统”JSF应用里使用了Web Flow,其中JSF的FacesServlet处于控制地位,Web Flow试图通过使用PhaseListener和NavigationHandler来找到自己合适的位置。这对我们来说是一项艰巨的集成任务,而且曝露了不少难以解决的微妙问题,比如异常处理、并发性、安全性、以及持久性上下文管理。

在Web Flow 2中,JSF和Spring Web之间的关系颠倒过来了。实际上,用控制反转来理解这一变化是最好的方式。现在,不是Spring去适应JSF了,而是JSF来适应Spring,在我们熟悉的Spring MVC DispatcherServlet内使用Spring MVC和Web Flow扩展点来实现这一点。基本上,我们吸收了JSF的长处,即它的UI组件模型,并把它作为一种表现层技术带入到Spring MVC和Web Flow Controller模型中。这一集成方法立竿见影的好处是你可以重用所有现存Spring MVC基础架构,包括:你的URL mappings、异常处理策略、Spring安全性策略,而且你可以结合JSF组件快速构建UI。这种方式可你让有机会使用所有当今可找到的JSF组件库,其使用方式对于有Web MVC概念背景的开发者来说非常自然。

人们可能会认为如果使用这么独特的集成方法,肯定会有些限制。但是到目前为止我们还没有发现。我们已经成功证明你可以在Spring Web环境下运行所有主流JSF组件库。另外,我们也建立了自己的称为“Spring Faces”的小组件库,其使用Spring Javascript提供了一套用于声明客户端校验和Ajax Facelet的标签。Spring Travel参考应用的faces flavor展示了这一组件库的实际使用。

Spring安全集成

Web Flow 2 引入了对flow的安全性支持。只需简单地注解一个flow、state或transition为“安全的”,SecurityFlowExecutionListener就会确保当前用户具备启动flow、进入step或发起event的权限。

更简单的流程定义语言

在Web Flow 2中你还将发现,用于定义flow的核心语言更加简单了。例如,对我们的Spring Travel参考应用来说,基于Web Flow 1的版本由大约200行流程相关的应用程序代码组成,这些代码分别位于6个不同的部件中。在最新的2.0.0 RC1版本中,其集成了更多功能,流程相关代码只有93行,分布在2个部件中,代码量减少了约50%,需维护的文件数减少了4个。你可以自己去比较一下版本1的中flow版本2中的等同配置

新的模块特性

我们也已将流程的概念扩展为一个“可重用、自包含的应用程序控制器模块”。现在,在默认情况下,一个流程和所有其所依赖的资源(如views、messages和helpers)被打包在一起。按领域职责组织代码是最佳实践,在Web Flow 2中我们正尽力简化其使用。你可以从这个例子中看到这一点:在booking目录里,流程用于支持国际化的views和message bundles被打包在一起。

这一版本的原则是什么?

我要说这一版本的主要原则就是易用。Web Flow 1 是一个拥有许多特性的成熟框架,但是 Web Flow 2 走得更远,它使用全面简化的流程定义语言使一些常见任务更加容易实现。集成是主旋律,我们提供了与JSF、Spring Security、Unified EL、Spring Javascript、以及Rich Faces最好的集成。正如前面所提及的,我们与Spring MVC的集成也已经做了改进,我认为,Web Flow 2 重申了Spring MVC作为Spring web应用基础平台的重要地位,在其基础上可以插入其它扩展功能。

从1.0迁移到2.0有什么值得期待的重要变化?

对流程定义语言的简化是人们可以期待的。为了帮助用户从1.0升级到2.0,我们在发行版中包含了一个WebFlowUpgrader工具,它可以自动把版本1的流程转换为新的版本2的语法。

至于完整的变化列表,我推荐所有1.0用户去查阅新的reference guide以及2.0的参考应用,参考应用展示了最佳实践。我们将保证我们的社区能尽可能愉快地升级到2.0。

Spring Web Flow有哪些支持工具?

Web Flow定义工具是基于XML的,因此,你所需的首要工具是一个好的、schema感知的XML编辑器。Web Flow一般将应用程序行为委派给了Java领域模型和服务层,因此你需要一个好的Java IDE。在此基础上,Spring IDE项目提供了一个极好的Eclipse插件,允许你可视化配置Spring Web应用,而且还包含一个图形化的Web Flow编辑器。Spring IDE团队现在正在专注于Web Flow 2配套软件的工作。Christian Dupuis,Spring IDE和最近宣布的SpringSource Tools Suite的领导人,已经计划在五月份推出一个新的Web Flow 2配套软件。

SpringSource Tool Suite为开发Spring Web应用提供了一个完整的集成开发环境,包括对flow的支持。我们的团队已经编撰了几个面向任务的教程和运行时错误分析,并作为该套件beta版的一部分一起发布,将来我们还要提供更多内容。还有,最近宣布的SpringSource Application Management Suite将在其即将发布的1.0.0.RC2中为Web Flow执行引擎提供运行时可视化能力。

Wdb Flow开发未来的焦点,2.1版本的目标是什么?

对于2.1我已经有许多计划。声明模型校验是一个时髦的话题,我们将在2.1版中包含它。2.0里,我们已经对回传(postback)提供了自动检测和调用模型校验器的支持,因此基础已经是现成的了。下一步是让校验约束能够针对模型进行声明,并且这些约束在客户端和服务器端都被强制要求。

我想你还能在2.1版本中看到我们使用脚本语言来定义控制流程的探索。构建在Web Flow 2引擎之上的Grails,已经展示了基于Groovy的流程定义语言是可行的,我们正在与Graeme一起合作,将其GroovyFlowBuilder合并回Web Flow。另外,我认为我们有机会将流程定义语言拓展到我所称的“站点定义语言”,这样你可以以声明的方式定义整个网站宏观结构,网站中的一些元素是流程。这一想法的灵感来自Jesse James Garrett的Visual Vocabulary,我认为在这一领域有很多有趣的工作可以去做。

我们也在努力确保现在发生在Web Flow 2中的革新内容能够在有意义的前提下回归到Spring框架本身。比如,我们正在谋求把所有Web Flow和Spring Faces的Ajax特性带给那些使用JSP和Tiles的已有Spring MVC应用程序开发者。

查看英文原文:Spring Web Flow 2.0.0.RC1 Released; Adds Ajax, JSF, and Security Integration

相关赞助商

InfoQ中文站Java社区,关注企业Java社区的变化与创新,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Java技术社区提供一流资讯。

没有回复

回复

独家内容

从卓越工程角度看微软中国开发团队的成长

开发团队的成长离不开优秀的人才,简捷有效的流程和高效率工具这三个卓越工程系统中的重要因素。本文作者从这三个因素分析了微软中国开发团队是如何“从优秀到卓越”的。

利用Ruby简化你的Java测试

本文是Productive Java with Ruby系列文章的第一篇,我将从单元测试这个话题开始,让Java的开发人员能够在实际工作中利用Ruby提高工作效率。

与赵进聊SaaS

InfoQ中文站有幸与阿里软件的首席架构师赵进在一起探讨了SaaS的相关话题,包括SOA和ASP与SaaS的异同、云计算、SaaS的前景、它的关键技术、技术瓶颈等等。

在ESB中选择路由还是编配?

在这篇文章中,Adrien Louis和Marc Dutoo在一个典型的ESB场景中讨论了编配和路由的区别和优缺点。他们讨论了几种连接服务的方法,从使用如自定义路由这样的低级别方法,到使用如工作流和编配这样面向业务的高级别方式,并总结说不存在“一边倒”的解决方案。

分布式系统中的一致性和可用性

本文是根据7月26日InfoQ中文站在杭州举行的QClub活动(第三期)后半程小组讨论总结而成。主要内容包括如何在SOA系统中实现服务编排,如何保证分布式系统中的一致性和可用性,以及如何在实施SOA的过程中控制接口的粒度等。

虚拟化导论

人们很容易想当然的以为虚拟化技术仅仅应用于服务器。而在现实中,虚拟化这一苏醒的概念正被运用于各个层面,其中包括网络,存储以及应用基础架构。在这篇导论中,InfoQ将深入每个方面,详尽向您描述虚拟化技术的运用以及其优点与不足。

用户故事估算技巧

作为开发者,同时也是ThoughtWorks的咨询师,Jay Fields总结了自己估算用户故事的有效技巧。

InfoQ案例研究:纳斯达克市场回放

在这篇案例研究中,InfoQ对Adobe AIR和Amazon的简单存储服务(Simple Storage Service ,S3)在NASDAQ市场回放程序(NASDAQ Market Replay)中的应用进行了详细的分析。