领先一步
VMware 提供培训和认证,助您加速前进。
了解更多尊敬的 Spring 社区:
我们很高兴地宣布 Spring Web Flow (SWF) 1.0 RC2(发布候选版 2)已发布。 Spring Web Flow (SWF) 1.0 RC2(发布候选版 2)已发布。 下载 | 文档 | 更新日志
此版本包含错误修复和轻微改进。 1.0 RC2 的新特性包括...
新特性
支持以可配置的方式传递从调用环境输入给新启动的流程执行(flow executions)。 默认情况下,所有请求参数都作为输入公开。 然后,流程可以使用其输入映射器(input mapper)将此输入映射到其自己的本地作用域(local scope)中。 该映射器定义了流程的输入契约,无论流程是作为顶级流程还是作为子流程启动,该契约都是一致的。
请参考以下请求 URL 作为示例:
http://localhost:8080/flights/search-flow?flightNumber=12345
默认情况下,当访问此 URL 时,后端的 FlowExecutor 会将 "flightNumber" 请求参数放入一个“输入映射”(input map)中。 然后,该输入映射会传递给 "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 环境中进行流程执行和外部重定向。 结合基于延续的仓库(continuation-based repository),这允许在 Portlet 环境中使用浏览器导航按钮(后退、刷新)。 此外,在 Portlet 环境中,我们现在公开了一个 "globalSessionMap" 属性,用于访问 Portlet Session APPLICATION_SCOPE 中的属性。
一个新的仓库工厂,名为 "SingleKeyFlowExecutionRepositoryFactory"。 此实现为每个持久化的流程执行生成一个唯一的标识符。 它有助于实现 1.0 EA 的“会话重定向”(conversation redirect)语义——即每次 POST 后,通过 REDIRECT-GET 请求一个嵌入了常量流程执行键的稳定的“流程执行 URL”。 请参阅 NumberGuess 示例以获取说明。
引入了一个独立的“会话”(conversation)子系统,提供的流程执行仓库实现会将逻辑会话的划分委托给它,以管理流程执行状态。 该会话子系统与 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"。 经验表明这些属性很少使用,并且是新用户的困惑来源。 作为更好的替代方案,要在进入视图状态(view state)之前执行数据绑定操作,只需从您的流程定义中调用 "bind" 操作方法即可。 要计算是否应在 bindAndValidate 尝试中进行验证,请覆盖单个 "validationEnabled(RequestContext)" 钩子。
FormAction 的 "exposeFormObject" 操作方法已被移除。 只需使用首选的 "setupForm" 即可。
FlowExecutionRepository 和 FlowExecutor SPI 接口已简化。 现在,更多的逻辑封装在 FlowExecutionRepository 后面,包括生成的 FlowExecutionKeys 的结构和格式。 此外,FlowExecutionRepository 现在只严格负责管理持久化的流程执行(persistent flow executions),别无其他。 “会话”(conversation)的附加概念不再为 SWF 核心所知。 这意味着几点:
FlowExecutor 接口,作为 SWF 的入口点,对调用者来说也得到了简化。 它现在封装了对复杂内部类型的了解,例如
EventIds 和 FlowExecutionKeys,因此总体上更容易使用。
同样地,移除了对显式 "conversationRedirect" 的支持。 这意味着移除了 "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. Phonebook - 最初的示例,展示了大部分功能(包括子流程)
2. Sellitem - 展示了一个具有条件转换、流程执行重定向、会话作用域和延续的向导(wizard)
3. Flowlauncher - 展示了启动和恢复流程的所有可能方式
4. Itemlist - 展示了 REST 风格的 URL 和内联流程(inline flows)
5. Shippingrate - 展示了 Spring Web Flow 与 Ajax 技术结合使用
(感谢 Steven Devijver)
6. NumberGuess - 展示了有状态 bean 和“单键”流程
执行重定向。
7. Birthdate - 展示了与 Struts 的集成
8. Fileupload - 展示了多部分文件上传
9. Phonebook-Portlet - 在 Portlet 环境中的 phonebook 示例
(注意流程定义并未改变)
10. Sellitem-JSF - 在 JSF 环境中的 sellitem 示例
要一步构建示例应用程序进行部署,只需解压发布归档文件,进入 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 团队