尊敬的 Spring 社区:
我很高兴地宣布 Spring Web Flow Preview 4 (PR4) 发布。此版本使 Spring Web Flow 与 Spring 1.2.2+ 对齐使用。
这将是 Web Flow 的最后一个预览版;下个版本将是 1.0 RC1。要下载,请访问:http://sourceforge.net/project/showfiles.php?group_id=73357&package_id=148517
注意:PR3 和 PR4 之间存在一些不兼容的更改。其中包括根包名的重命名,从 org.springframework.web.flow 到 org.springframework.webflow,表明 Web Flow 作为独立模块应拥有顶级包的地位。 有关更改的完整列表,请在此处访问更改日志:http://opensource.atlassian.com/confluence/spring/display/WEBFLOW/Change+Log
WebFlow Portlet 用户特别注意:PR4 不包含 Portlet MVC 集成。 Portlet MVC 用户需要等待几周后的 Web Flow RC1,届时 Portlet MVC 将集成并随 Spring 1.3 发布。我们为由此造成的短期不便表示歉意:预计更好的 Portlet MVC 集成和示例应用程序将在未来几周内回归。
此 PR4 版本中包含了一些新的重要增强。以下是其中的一些:
状态进入动作 (State entry actions)
任何状态类型(State type)的实例都可以配置一个进入动作(entry action),该动作将在进入该状态时执行。 这有助于通用的状态设置逻辑。例如,一个 ViewState 可以设置一个进入动作来执行任意的预渲染逻辑。这样的预渲染逻辑可能加载参考数据以填充表单下拉列表。 任意数量的动作可以作为复合状态进入动作(composite state entry action)的一部分按顺序执行
<view-state id="displayCriteria" view="searchCriteria">
<entry>
<action bean="searchFormAction" method="setupForm"/>
<action bean="searchFormAction" method="setupReferenceData"/>
</entry>
<transition on="search" to="executeSearch">
<action bean="searchFormAction" method="bindAndValidate"/>
</transition>
</view-state>
可迁移状态退出动作 (TransitionableState exit actions)
任何可迁移状态类型(TransitionableState type)的实例都可以配置一个退出动作(exit action),该动作将在退出该状态时执行。这有助于通用的状态清理逻辑。 可以再次指定多个动作,它们将自动封装在一个 CompositeAction 中。
<action-state id="executeSearch">
<action bean="searchAction"/>
<transition on="success" to="displayResults"/>
<exit>
<action bean="auditAction" method="logResults"/>
</exit>
</action-state>
流程执行监听器标准 (Flow Execution Listener Criteria)
在 PR4 之前,很难为一组流程定义(flow definitions)定义哪些监听器(listeners)应该观察已启动的流程执行(flow executions)。 新的 FlowExecutionListenerCriteria 提供了一种可插拔的策略,根据每个请求计算给定 Flow 定义的执行适用的监听器集合。
<bean id="flowExecutionManager"
class="org.springframework.webflow.execution.servlet.ServletFlowExecutionManager">
<property name="listenerMap">
<map>
<entry value="*">
<key>
<list>
<bean class="example.Listener1"/>
<bean class="example.Listener2"/>
</list>
</key>
</entry>
<entry value="sampleFlowA">
<key>
<list>
<bean class="example.Listener3"/>
</list>
</key>
</entry>
</map>
</property>
...
</bean>
上面的 Spring 配置将监听器 1 和 2 附加到所有流程 (*) 的执行中,而监听器 3 仅附加到 "sampleFlowA"。
极大增强的表达式语言支持 (Greatly enhanced expression language support)
此版本中真正的优势之一是新的 Spring 数据绑定模块(Spring data binding module)的持续进展。 spring-binding 中包含了一个表达式解析和评估抽象,该抽象与强大的类型转换工具无缝集成。 这两个组合使得可以消费并转换为可评估表达式的任意字符串,这些字符串代表一个或多个表达式,例如“公告:${org} ${product} ${release} 已发布!”,并利用任何表达式语言,默认是 OGNL。 Spring Web Flow 在多个地方利用了此机制,包括重定向表达式(redirect expressions)、转换表达式(transition expressions)和属性映射表达式(attribute mapping expressions)
- 例如,对于针对请求上下文评估的重定向表达式(redirect expressions)
redirect:/${sourceEvent.parameters.url}?attribute1=${flowScope.foo}&attribute
2=${requestScope.bar}"
- 用于驱动动态状态转换决策的转换表达式(transition expressions)
<transition on="${result == 'success' && ${flowScope.selectedItinerary.price} > 500.0" to="requireCreditCheck"/>
- 用于在两个源之间映射属性的属性映射表达式(attribute mapping expressions)
<subflow-state id="browseDetails" flow="detailFlow">
<attribute-mapper>
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
</attribute-mapper>
...
</subflow-state>
增强的属性映射器类型转换支持 (Enhanced attribute-mapper type-conversion support)
输入和输出映射元素(input and output mapping elements)的“from”和“to”属性可用于指定类型转换规则。 因此定义:
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
表示:
将 ${sourceEvent.parameters.id} 的值从字符串转换为 long,并将 long 结果设置到 someBean.id。
基于 Session 的 TransactionSynchronizer 策略 (Session-based TransactionSynchronizer strategy)
PR4 新增了一个在 HTTP-session 范围存储中管理事务令牌的 TransactionSynchronizer。 它非常适合与利用 continuations 并需要防止发生重复的应用事务的流程配合使用。
新的便利动作实现 (New convenience action implementations)
webflow.action 包现在提供了一些新的动作实现,包括:CompositeAction、DelegatingAction 和 GuardedAction。
JMX 支持的流程执行统计 (JMX-enabled flow execution statistics)
sellitem 示例现在演示了使用 JMX 管理协议收集所有 Web Flows 全局统计信息的能力,并使用任何 JMX 客户端(如 JDK 1.5 JConsole)监控这些统计信息。 未来的 web flow 版本将增强此功能,以允许按流程执行进行管理和监控。
简化和改进的 Struts 集成 (Simplified and improved Struts integration)
Struts 1.x 集成在 PR4 中得到了极大简化,并与 Spring 1.2.2 引入的 SpringBindingActionForm 对齐。 不再需要特殊的 FlowActionMapping,因为所有 webflow 特定的配置现在都由 Spring 管理。 请参考 birthdate 示例应用程序以获取具体示例。
其他 (Other)
改进的 javadoc、错误消息和日志记录
大大改进的构建系统,“一步式”示例应用程序构建/部署
Erwin 和我必须感谢 Colin Sampaleanu 构建了一个出色的构建系统,用于管理整个开发和发布过程。 下载 PR4 后,您会发现构建和部署示例应用程序以及 Spring Web Flow 的任何组件(例如项目本身或绑定模块)变得简单易行,并伴随细致、自动化的 jar 文件管理。 这个“通用构建”系统基于 Ant 1.6.x,并利用 Ivy 进行 jar 依赖管理——
这些只是此版本的一些新功能。 有关更改的完整列表,请参阅 http://opensource.atlassian.com/confluence/spring/display/WEBFLOW/Change+Log
一如既往,我们非常重视您的反馈。 预计 Web Flow 1.0 RC1 将在七月底发布,包含 Portlet MVC 和 JSF 集成。
祝好,
Keith Donald
Erwin Vervaet