亲爱的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 提供了一种可插拔策略,其中针对给定流程定义的执行适用的监听器集是按请求计算的。
<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} 的值从字符串转换为 long,并将 long 结果设置到 someBean.id。
基于会话的事务同步器策略
PR4 新增了一个事务同步器,它在 HTTP 会话范围的存储中管理事务令牌。 它非常适用于利用连续性并需要防止重复应用程序事务发生的流程。
新的便捷动作实现
webflow.action 包现在支持几种新的动作实现,包括:CompositeAction、DelegatingAction 和 GuardedAction。
JMX 启用流程执行统计
sellitem 示例现在演示了使用 JMX 管理协议收集所有 Web Flow 的全局统计信息,并使用任何 JMX 客户端(例如 JDK 1.5 JConsole)监控这些统计信息的能力。 未来的 web flow 版本将增强此功能,以允许按流程执行进行管理和监控。
简化和改进的 Struts 集成
Struts 1.x 集成在 PR4 中得到了极大的简化,并与 Spring 1.2.2 引入的 SpringBindingActionForm 对齐。 不再需要特殊的 FlowActionMapping,因为所有 webflow 特定配置现在都由 Spring 管理。 请参阅 birthdate 示例应用程序以获取具体示例。
其他
改进的 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 将在7月底发布,并集成 Portlet MVC 和 JSF。
干杯,
Keith Donald
Erwin Vervaet