Spring Web Flow 1.0 RC2 发布

发布 | Keith Donald | 2006年6月10日 | ...


 

尊敬的 Spring 社区:

我们很高兴地宣布 Spring Web Flow (SWF) 1.0 RC2(候选发布版本 2)已发布。  下载 | 文档 | 变更日志

此版本包含错误修复和一些小的改进。1.0 RC2 的新特性和值得注意的改进包括…

新特性和值得注意的改进

以可配置的方式支持从调用环境传递新启动的流程执行输入。  默认情况下,所有请求参数都作为输入公开。然后,流程可以选择使用其输入映射器将其输入映射到其自己的本地作用域。此映射器定义了流程的输入契约,无论流程是作为顶级流程启动还是作为子流程启动,该契约都保持一致。

以下请求 URL 作为一个示例

https://127.0.0.1:8080/flights/search-flow?flightNumber=12345

默认情况下,当访问此 URL 时,支持的 FlowExecutor 会将“flightNumber”请求参数放入“输入映射”中。然后,输入映射传递到“search-flow”的新执行。

在 search-flow 定义中

<flow start-state="executeSearch">
    <input-mapper>
        <mapping source="flightNumber" target="flowScope.flightNumber"/>
    </input-mapper>

    ...
</flow>
上面的 <input-mapper> 定义了流程的输入契约,声明此流程支持“flightNumber”输入属性。当在启动时提供 flightNumber 时,它将被映射到“flowScope”中,名称为“flightNumber”。映射器还能够在映射操作期间执行类型转换。

要自定义流程执行输入映射填充,例如,从请求路径或其他外部源提取属性,请配置“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 {
    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();
}
当启动新的流程执行并需要将其持久化到一个请求之外时,存储库会调用“beginConversation”以启动新的逻辑
会话并将属性放入会话作用域以跟踪执行状态。同样,当流程执行结束时,管理会话也结束,并且任何分配的状态都会被清除。

将来,我们希望在此系统中提供强大的功能,包括通过 JMX 监控和管理会话以及会话历史记录和统计信息。我们还希望证明其对 Spring Web Flow 之外的其他环境的适用性。特别感谢 Juergen Hoeller 和 Ben Hale 在此可移植会话服务抽象的设计中提供的帮助。


可能影响用户的更改

在 1.0 RC2 中,在通往 1.0 正式的道路上,有一些可能影响用户的更改。以下部分将它们列出

在 spring-webflow-dtd 中,我们将 'resultName' 和 'resultScope' <action/> 元素属性分别重命名为 'result-name' 和 'result-scope',以与其他属性和元素名称保持一致。

出于简化目的,删除了 FormAction 属性“bindOnSetupForm”和“validateOnBinding”。  经验表明,这些属性很少使用,并且一直是新用户混淆的来源。作为更好的替代方案,要在进入视图状态之前执行数据绑定操作,只需从流程定义中调用“bind”操作方法即可。要计算是否应为 bindAndValidate 尝试执行验证,请覆盖单个“validationEnabled(RequestContext)”钩子。

删除了 FormAction“exposeFormObject”操作方法。  只需使用“setupForm”,这是首选。

简化了 FlowExecutionRepository 和 FlowExecutor SPI 接口。  现在,更多逻辑封装在 FlowExecutionRepository 后面,包括生成的 FlowExecutionKeys 的结构和格式。此外,FlowExecutionRepository 现在严格负责管理持久化流程执行,而没有其他操作。不再将“会话”的附加概念告知 SWF 核心。这意味着以下几点

  • 整体存储库接口更简单,从而更容易创建具有自定义 FlowExecutionKeys 的自定义 FlowExecutionRepositories。
  • SWF 核心词汇更强大:流程执行器调用流程执行以执行流程。在超出单个请求后保持活动的执行将持久化到存储库中。
  • 默认存储库实现选择委托给一个不同的“会话子系统”来跟踪由执行系统驱动的会话状态,但对该系统的依赖性完全封装且是可选的。

FlowExecutor 接口(进入 SWF 的入口点)也针对调用者进行了简化。它现在封装了对复杂内部类型的了解,例如
例如 EventIds 和 FlowExecutionKeys,因此总体上更易于使用。

同样,删除了对显式“conversationRedirect”的支持。  这表示删除了“conversationRedirect:”
'view' 前缀和“CONVERSATION”RedirectType。要使用 1.0 RC2 实现相同的逻辑重定向语义,只需配置具有 redirectOnPause 类型 FLOW_EXECUTION 和存储库工厂的 FlowExecutor 即可
SingleKeyFlowExecutionRepositoryFactory。
--

Spring Web Flow 1.0 RC2 进一步完善了参考手册,提供了 50 页关于 SWF 用法的资料。该手册以 HTML 和 PDF 格式在线提供。

开始使用 Spring Web Flow 的最佳方法之一是查看和演练示例应用程序。我们建议从一开始就查看所有示例,并根据需要补充参考手册材料。1.0 RC2 版本附带十个示例应用程序,每个应用程序都演示了产品的一组不同的功能。这些示例是

1. Phonebook - 演示大多数功能(包括子流程)的原始示例
2. Sellitem - 演示带有条件转换、流程执行重定向、会话作用域和延续的向导
3. Flowlauncher - 演示启动和恢复流程的所有可能方法
4. Itemlist - 演示 REST 样式 URL 和内联流程
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”目标即可。有关发布存档内容和示例的更多信息,请参阅发布 readme.txt 和
projects/spring-webflow/spring-webflow-samples/readme.txt。
所有示例项目都是 Spring IDE 项目,可以直接导入到 Eclipse 中。

感谢所有支持此版本的人。目前,我们预计 SWF 的下一个版本将是 1.0 正式版,目标是 6 月下旬
时间范围。如果需要,我们仍然有可能发布另一个 1.0 候选版本。请务必监控 SWF 主页和
论坛以获取更新。

享受!

Spring Web Flow 团队

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部