领先一步
VMware 提供培训和认证,助您加速进步。
了解更多
亲爱的Spring社区,
我们很高兴地宣布 Spring Web Flow (SWF) 1.0 RC2 (发布候选版 2) 已发布。 下载 | 文档 | 更新日志
此版本包含错误修复和次要改进。 1.0 RC2 的新功能和值得注意之处包括...
新特性和值得注意的改进
支持以可配置的方式将新启动的流程执行输入从其调用环境传递。 默认情况下,所有请求参数都作为输入暴露。 流程可以选择使用其输入映射器将此输入映射到其自身的本地作用域。 此映射器定义了流程的输入契约,无论流程是作为顶层流程还是子流程启动,该契约都是一致的。
考虑以下请求 URL 作为示例:
https://:8080/flights/search-flow?flightNumber=12345
默认情况下,当访问此 URL 时,后台的 FlowExecutor 会将 "flightNumber" 请求参数放入一个 "输入映射" 中。 然后将该输入映射传递给 "search-flow" 的新执行。
在 search-flow 定义中
<flow start-state="executeSearch">上述 <input-mapper> 定义了流程的输入契约,声明此流程支持 "flightNumber" 输入属性。 当启动时提供了 flightNumber,它将被映射到 "flowScope" 中,名称为 "flightNumber"。 映射器还能够在映射操作期间执行类型转换。
<input-mapper>
<mapping source="flightNumber" target="flowScope.flightNumber"/>
</input-mapper>
...
</flow>
要自定义流程执行输入映射的填充,例如,从请求路径或某些其他外部源拉取属性,请配置 "FlowExecutorImpl.inputMapper" 属性。
支持在 JSR168 Portlet 环境中进行流程执行和外部重定向。 结合基于延续的存储库,这允许在 Portlet 环境中使用浏览器导航按钮(后退、刷新)。 此外,在 Portlet 环境中,我们现在暴露了一个 "globalSessionMap" 属性,用于访问 Portlet Session APPLICATION_SCOPE 中的属性。
一个新的存储库工厂名为 "SingleKeyFlowExecutionRepositoryFactory"。 该实现为每个持久化流执行生成一个唯一的标识符。 它对于实现 1.0 EA "会话重定向" 语义很有用——即每次 POST 后,REDIRECT-GET 都会访问一个稳定的 "流执行 URL",该 URL 中嵌入了常量流执行键。 请参阅 NumberGuess 示例以进行说明。
引入了一个独立的“会话”子系统,所提供的流执行仓库实现会委托该子系统来划定管理流执行状态的逻辑会话。 此会话子系统完全独立于 Spring Web Flow 的其余部分,可在 SWF 之外使用,并可能随着时间的推移发展成为独立的模块。 核心服务接口包括:
public interface ConversationService {当启动一个新的流程执行并需要在一个请求之外持久化时,存储库会调用 "beginConversation" 来启动一个新的逻辑
public Conversation beginConversation(ConversationParameters parameters);
public Conversation getConversation(ConversationId id);
public ConversationId parseConversationId(String encodedId);
}
public interface Conversation {
public ConversationId getId();
public void lock();
public void end();
public Object getAttribute(String name);
public void setAttribute(String name, Object value);
public void removeAttribute(String name);
public void unlock();
}
未来,我们期望在这个系统中提供强大的功能,包括通过 JMX 进行会话监控和管理,以及会话历史和统计数据。 我们还期望证明它适用于 Spring Web Flow 之外的其他环境。 特别感谢 Juergen Hoeller 和 Ben Hale 在此可移植会话服务抽象设计中的帮助。
潜在的用户影响变更
在通往 1.0 最终版本的道路上,1.0 RC2 存在一些潜在的用户影响变更。 以下部分将对此进行说明。
在 spring-webflow-dtd 中,我们为了与其他属性和元素名称保持一致,将 '<action/>' 元素属性 'resultName' 和 'resultScope' 分别重命名为 'result-name' 和 'result-scope'。
为了简化,移除了 FormAction 属性 "bindOnSetupForm" 和 "validateOnBinding"。 经验表明,这些属性很少使用 并且一直是新用户的困惑来源。 作为更好的替代方案,要在进入视图状态之前执行数据绑定操作,只需从您的流程定义中调用 "bind" 动作方法即可。 要计算是否应为 bindAndValidate 尝试进行验证,请重写单个 "validationEnabled(RequestContext)" 钩子。
移除了 FormAction 的 "exposeFormObject" 动作方法。 简单地使用 "setupForm" 即可,这是首选方法。
FlowExecutionRepository 和 FlowExecutor SPI 接口已简化。 更多的逻辑现在封装在 FlowExecutionRepository 之后,包括生成的 FlowExecutionKeys 的结构和格式。 此外,FlowExecutionRepository 现在严格负责管理持久化的流程执行,别无他事。 “会话”这一附加概念不再为 SWF 核心所知。 这意味着几点:
FlowExecutor 接口是 SWF 的入口点,它也为调用者简化了。 它现在封装了复杂内部类型(如 EventIds 和 FlowExecutionKeys)的知识,因此总体上更易于使用。
FlowExecutor 接口,作为 SWF 的入口点,也为调用者进行了简化。 它现在封装了复杂内部类型(例如 EventIds 和 FlowExecutionKeys)的知识,因此总体上更易于使用。
同样,对显式“会话重定向”的支持已被移除。 这表示移除了 "conversationRedirect:"
“view”前缀和“CONVERSATION”RedirectType。 要在 1.0 RC2 中实现相同的逻辑重定向语义,只需将 FlowExecutor 配置为 redirectOnPause 类型 FLOW_EXECUTION 和 repositoryFactory 为
SingleKeyFlowExecutionRepositoryFactory。
--
Spring Web Flow 1.0 RC2 进一步完善了参考手册,提供了 50 页关于 SWF 使用的资料。 该手册以 HTML 和 PDF 格式在线提供。
开始使用 Spring Web Flow 的最佳方法之一是查看和演练示例应用程序。 我们建议从一开始就查看所有示例,并根据需要补充参考手册材料。1.0 RC2 版本附带了十个示例应用程序,每个都展示了不同的产品功能集。 这些示例是:
1. 电话簿 - 展示大多数功能(包括子流程)的原始示例
2. 销售商品 - 展示带条件转换、流程执行重定向、会话作用域和延续的向导
3. 流程启动器 - 展示启动和恢复流程的所有可能方式
4. 商品列表 - 展示 REST 风格 URL 和内联流程
5. 运费 - 演示 Spring Web Flow 与 Ajax 技术结合使用
(感谢 Steven Devijver)
6. 猜数字 - 演示有状态 Bean 和“单键”流程
执行重定向。
7. 生日 - 展示 Struts 集成
8. 文件上传 - 展示多部分文件上传
9. 电话簿-Portlet - Portlet 环境中的电话簿示例
(请注意流程定义没有变化)
10. 销售商品-JSF - JSF 环境中的销售商品示例
要一步构建用于部署的示例应用程序,只需解压发布档案,访问 projects/spring-webflow/build-spring-webflow 目录,然后执行 "ant dist" 目标即可。 请参阅 release readme.txt 和
projects/spring-webflow/spring-webflow-samples/readme.txt 分别获取有关发布存档内容和示例的更多信息。
所有示例项目都是 Spring IDE 项目,可直接导入 Eclipse。
感谢所有支持本次发布的人。 目前,我们预计 SWF 的下一个版本将是 1.0 最终版,目标发布时间在六月底
。 如果有需要,仍有可能发布另一个 1.0 版本候选。 请务必关注 SWF 主页和
论坛以获取更新。
祝您使用愉快!
Spring Web Flow 团队