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事件处理能力。因此我们的Ajax支持实际上包含了两个部分:Web Flow结合服务器端来检测可以使用Ajax的客户端并根据请求进行局部展现;客户端,用于提交Ajax请求并将响应片断与页面联系起来。
与Spring MVC更深度集成
Spring MVC和Web Flow是互补的:Spring MVC是Web应用开发的基础平台,而Web Flow是一个Controller扩展,用来实现流程(也就是会话——conversations),它是跨多个请求的有状态的用户交互。
重构并扩展了JSF集成
在Web Flow还是版本1的时候,你可能已经在“传统”JSF应用里使用了Web Flow,其中JSF的FacesServlet处于控制地位,Web Flow试图通过使用PhaseListener和NavigationHandler来找到自己合适的位置。
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应用基础平台的重要地位,在其基础上可以插入其它扩展功能。