尊敬的 Spring 社区:
我很高兴地宣布 Spring Web Flow 预览版 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 类型的任何实例都可以配置为进入操作,该操作将在进入状态时执行。这有助于通用状态设置逻辑。例如,ViewState 可以设置进入操作以执行任意预渲染逻辑。此类预渲染逻辑可能会加载参考数据以填充表单下拉列表。任何数量的操作都可以按顺序作为复合状态进入操作的一部分执行
<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 类型的任何实例都可以配置为退出操作,该操作将在退出状态时执行。这有助于通用状态拆卸逻辑。同样可以指定多个操作,它们将自动包装在 CompositeAction 中。
<action-state id="executeSearch">
<action bean="searchAction"/>
<transition on="success" to="displayResults"/>
<exit>
<action bean="auditAction" method="logResults"/>
</exit>
</action-state>
流执行侦听器条件
在 PR4 之前,没有简单的方法来为一组流定义定义哪些侦听器应该观察启动的流执行。新的 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”。
大大增强了表达式语言支持
此版本的一个真正优势是新 Spring 数据绑定模块的持续发展。spring-binding 中包含一个表达式解析和评估抽象,它与强大的类型转换工具无缝集成。这两者结合在一起,允许使用表示一个或多个表达式的任意字符串(例如“公告:${org} ${product} ${release} 发布!”)来使用和转换为可评估表达式,使用任何表达式语言,OGNL 为默认值。Spring Web Flow 在多个地方利用了此机制,包括重定向表达式、转换表达式和属性映射表达式
- 例如,针对请求上下文评估的重定向表达式
redirect:/${sourceEvent.parameters.url}?attribute1=${flowScope.foo}&attribute
2=${requestScope.bar}"
- 驱动动态状态转换决策的转换表达式
<transition on="${result == 'success' && ${flowScope.selectedItinerary.price} > 500.0" to="requireCreditCheck"/>
- 在两个源之间映射属性的属性映射表达式
<subflow-state id="browseDetails" flow="detailFlow">
<attribute-mapper>
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
</attribute-mapper>
...
</subflow-state>
增强的属性映射器类型转换支持
输入和输出映射元素的“from”和“to”属性可用于指定类型转换规则。因此,定义
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
表示
将 ${sourceEvent.parameters.id} 的值从字符串转换为长整型,并在 someBean.id 处设置长整型结果。
基于会话的事务同步器策略
PR4 中新增了一个事务同步器,它在 HTTP 会话范围的存储中管理事务令牌。它非常适合处理利用延续并需要防止发生重复应用程序事务的流。
新的便利操作实现
webflow.action 包现在包含了一些新的 Action 实现,包括:CompositeAction、DelegatingAction 和 GuardedAction。
支持 JMX 的流执行统计信息
sellitem 示例现在展示了如何使用 JMX 管理协议收集所有 Web Flow 的全局统计信息,并使用任何 JMX 客户端(例如 JDK 1.5 JConsole)监控这些统计信息。未来的 Web Flow 版本将增强此功能,以便能够基于每个流执行进行管理和监控。
简化并改进了与 Struts 的集成
通过 PR4 大大简化了与 Struts 1.x 的集成,并与 Spring 1.2.2 引入的 SpringBindingActionForm 保持一致。不再需要特殊的 FlowActionMapping,因为所有 Web Flow 特定的配置现在都由 Spring 管理。请参阅出生日期示例应用程序以了解具体示例。
其他
改进了 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
一如既往,我们非常重视您的反馈。预计 7 月底发布 Web Flow 1.0 RC1,其中将包含 Portlet MVC 和 JSF 集成。
此致,
Keith Donald
Erwin Vervaet