BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Grelle 关注 0 他的粉丝 , Donald 关注 0 他的粉丝 , Slobojan 关注 0 他的粉丝 ,译者 宋玮 关注 0 他的粉丝 发布于 2008年4月24日. 估计阅读时间: 12 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

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账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT