尊敬的 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 包现在具有几个新的操作实现,包括: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 管理。请参阅生日示例应用程序以了解具体示例。
其他
改进的 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