# 2. 最新更新

## 2.1. Spring Web 流 2.5

这个版本提供了一条到 Spring Framework5 的升级路径，而这条路径又需要 Java8+、 Servlet 3.1、 Hibernate 5、Tiles3.有关更多详细信息，请参见[Spring Framework wiki](https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-5.x)。[样品库](https://github.com/spring-projects/spring-webflow-samples)已升级到 Spring Web 流 2.5.

从 2.5 开始，不再有*spring-js*模块。该模块中的类已被保留，但已转移到*spring-webflow*模块中的新包中。*spring-js-resources*模块作为一个可选模块是可用的，必须显式地包含该模块。

此版本需要 JSF2.2 或更高版本。

## 2.2. Spring Web 流 2.4

这个版本需要 JDK1.6.

### 2.2.1.基于 Java 的配置

Web Flow 现在支持基于 Java 的系统配置替代方案。参见更新的[第 10 章，* 系统设置 *](system-setup.html)。

还请参见[Booking-MVC](https://github.com/spring-projects/spring-webflow-samples/tree/master/booking-mvc)和[预订脸](https://github.com/spring-projects/spring-webflow-samples/tree/master/booking-faces)示例，这些示例已更新为使用所有 Java 配置。

### 2.2.2. Spring MVC 闪存范围集成

当一个流结束时，在将属性保存在 Spring MVC 的闪存范围中供控制器访问后，它现在可以重定向到 Spring MVC 控制器。

见[第 11.8 节，“将流输出保存到 MVC 闪存范围”](spring-mvc.html#spring-mvc-flash-output)。

### 2.2.3.部分 JSR-303 Bean 验证

流定义可以通过 View State 和 Transition 元素支持的 Validation-Hints 属性在模型上应用部分验证。

见[该部分被称为“部分验证”。](views.html#view-validation-jsr303-partial)。

### 2.2.4. Hibernate 支持

除了 Hibernate 3 之外，`HibernateFlowExecutionListener`现在还支持 Hibernate 4.

截至 2.4.4，`HibernateFlowExecutionListener`也与 Hibernate 5 起作用。

### 2.2.5.磁贴 3 支持

现在`AjaxTilesView`除了支持 tile2.2 外，还支持 tile3.

### 2.2.6.最低 JSF2.0 要求

Spring Web Flow 不再支持 Java ServerFaces 版本 1.2 和更早版本，如果你还没有这样做，你将需要升级到 JSF2.0 或更高版本。此外，在这个版本中，已经删除了以前通过 JSF1.2 提供的用于渐进 Ajax 增强的 Spring 面组件。

见[???]()。

### 2.2.7.Portlet API2.0 和 JSF2.0 支持

Spring Web Flow2.2 中引入的内部 Portlet 集成已经进行了升级，以实现 JSF2.0 的兼容性。Portlet 环境不支持一些更高级的 JSF2.0 特性，例如部分状态保存，但是，现有的应用程序现在可以升级到所需的最低 JSF 版本。升级后的项目将需要确保`<faces:resources>`元素被包括在其 Spring 配置中。

### 2.2.8.异议

此版本删除*Spring.js*。该版本包括整个 * Spring-js-resources* 模块，包括*Spring.js*和 * Spring-dojo.js* 以及捆绑的 Dojo 和 CSS 框架。同样不推荐的是来自*spring-js*模块的`SpringJavascriptAjaxHandler`。*spring-js*的其余部分，例如`AjaxHandler`，`AjaxTilesView`，将在未来的版本中折叠成*spring-webflow*。

OGNL 支持现在已被弃用。

## 2.3. Spring Web 流 2.3

### 2.3.1.在页面上嵌入流

默认情况下，WebFlow 在进入每个视图状态时都会进行客户端重定向。这使得不可能在页面或模态对话框中嵌入流并执行多个视图状态，而不会导致整页刷新。Web Flow 现在支持以“嵌入式”模式启动一个流。在这种模式下，在 Ajax 请求期间，流可以转换到其他视图状态，而无需客户端重定向。见[第 11.7 节，“在页面上嵌入流”](spring-mvc.html#spring-mvc-embedded-flow)和[第 13.6 节，“在页面上嵌入流”](spring-faces.html#spring-faces-embedded-mode)。

### 2.3.2.支持 JSR-303 Bean 验证

对 JSR-303 Bean 验证 API 的支持现在可以在 Spring MVC 中提供的等效支持的基础上获得。有关更多详细信息，请参见[第 5.10 节，“验证模型”](views.html#view-validate)。

### 2.3.3.流管理的持久性上下文传播

从 Web 流 2.3 开始，管理的流`PersistenceContext`将自动扩展（传播）到子流，假设子流也具有启用的特性。见[第 7.3 节，“流管理的持久性和子流”](flow-managed-persistence.html#flow-managed-persistence-propagation)。

### 2.3.4.Portlet2.0 资源请求

现在已经添加了对 Portlet2.0 资源请求的支持，从而支持部分呈现的 Ajax 请求。可以在 JSP 页面中使用`<portlet:resourceURL>`标记来准备此类请求的 URL。服务器端处理类似于一个动作和一个呈现请求的组合，但合并在一个请求中。与呈现请求不同，来自资源请求的响应仅包括来自目标 Portlet 的内容。

### 2.3.5.自定义对话管理器

现在，`<flow-execution-repository>`元素提供了一个 conversation-manager 属性，该属性接受对 Conversationmanager 实例的引用。

### 2.3.6.在相同的状态下重定向

默认情况下，只要当前请求不是 Ajax 请求，在保持相同视图状态时，Web 流就会执行客户端重定向。这在表单验证失败后很有用。点击刷新或返回不会导致浏览器警告。因此，这种行为通常是可取的。然而，一个新的流执行属性使得禁用它成为可能，这在某些特定于 JSF 应用程序的情况下也是必要的。见[第 13.7 节，“在同一状态下重定向”](spring-faces.html#spring-faces-redirect-in-same-state)。

### 2.3.7.样本

建立分布所包括的样本的过程已经简化。 Maven 可用于在一个步骤中构建所有样本。Eclipse 设置包含源代码引用以简化调试。

可按以下方式获取更多样本：

```
mkdir spring-samples
cd spring-samples
svn co https://src.springframework.org/svn/spring-samples/webflow-primefaces-showcase
cd webflow-primefaces-showcase
mvn package
# import into Eclipse

```

```
mkdir spring-samples
cd spring-samples
svn co https://src.springframework.org/svn/spring-samples/webflow-showcase
cd webflow-showcase
mvn package
# import into Eclipse

```

## 2.4. Spring Web 流 2.2

### 2.4.1.JSF2 支持

#### 全面的 JSF2 支持

Spring Web Flow2.2 版本以 2.1 为基础，增加了对核心 JSF2 特性的支持，2.1 中不支持的以下特性现在可用：部分状态保存、JSF2 资源请求、处理和 JSF2Ajax 请求。在这一点上，对 JSF2 的支持被认为是全面的，尽管并不涵盖所有的 JSF2 特性--排除的主要是与 Web 流提供的核心价值重叠的特性，例如与导航和状态管理有关的特性。

有关重要的配置更改，请参见[第 13.3 节，“配置用于 JSF 的 Web 流”](spring-faces.html#spring-faces-webflow-config)。请注意，只支持 Sun Mojarra2.0.3 或更高版本的部分状态保存。它还没有得到 MyFaces 的支持。这是因为 MyFaces 在如何存储组件状态方面不那么容易定制。我们将与 MyFaces 合作提供这种支持。同时，你将需要在`web.xml`中使用`javax.faces.PARTIAL_STATE_SAVING`上下文参数来禁用 Apache MyFaces 的部分状态保存。

#### 带原始表面组件的旅行样本

演示 Spring Web 流和 JSF 支持的主要 Spring 旅行示例现在构建在 JSF2 和来自 PrimeFaces 组件库的组件上。请核对一下分配中的订货面样品。

可以在 Spring WebFlow-Prime Faces[Showcase](https://src.springframework.org/svn/spring-samples/webflow-primefaces-showcase)处找到其他示例，这是[spring-samples](https://src.springframework.org/svn/spring-samples)存储库中的一个 SVN 存储库。使用以下命令检查并构建：

```
svn co https://src.springframework.org/svn/spring-samples/webflow-primefaces-showcase
	cd webflow-primefaces-showcase
	mvn package
	
```

### 2.4.2. Spring 安全 Facelets 标记库

Spring 新的安全标记库可用于 JSF2.0 或 JSF1.2Facelets 视图。它提供了一个 \<authorize\>标记以及几个 EL 函数。有关更多详细信息，请参见[Section 13.9, “Using the Spring Security Facelets Tag Library”](spring-faces.html#spring-faces-security-taglib)。

### 2.4.3. Spring JavaScript 更新

#### 弃用资源 servlet

从 Spring 3.0.4 开始， Spring 框架包括对 ResourcesServlet 的替换。请参阅 Spring 框架文档了解定制 MVC 名称空间的详细信息，特别是新的[“资源”](http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-static-resources)元素。

#### Dojo1.5 和 Dojox

捆绑的定制 Dojo 版本升级到了 1.5 版本。它现在包括 Dojox。

请注意，通常鼓励应用程序准备自己的定制 Dojo 构建以优化性能，这取决于 Dojo 的哪些部分通常一起使用。有关示例，请参见 Spring Web 流用于准备自己的定制 Dojo 构建的[scripts](https://src.springframework.org/svn/spring-webflow/branches/spring-webflow-2.2-maintenance/spring-js-resources/scripts/dojo)。

#### 两个 Spring JS 工件

`spring-js`工件被一分为二--新工件（`spring-js-resources`）包含客户端资源（.js、.css 等），而现有工件（`spring-js`）仅包含服务器端 Java 代码。

准备自己的定制 Dojo 构建的应用程序现在有一个选项，可以避免将`spring-js-resources`和`Spring.js`直接放在其 Web 应用程序的根下面。

#### 客户端资源移至 meta-inf/web-resources

捆绑的客户机资源（.js、.css 等）已从其先前位于`META-INF`下的位置移到`META-INF/web-resources`。这种变化对于应用程序是透明的，但是当使用 Spring 3.0.4 中提供的新的资源处理机制时，将导致更简单和更安全的配置。

### 2.4.4.JSF Portlet 支持

#### Portlet API2.0 和 JSF1.2 支持

在 Spring 以前的版本中，对 JSF Portlet 的 Web 流支持依赖于用于 JSF 实现的 Portlet 桥，并且被认为是实验性的。 Spring Web Flow2.2 基于其自身的内部 Portlet 集成，增加了对 JSF Portlet 的支持，该集成以 Portlet API2.0 和 JSF1.2 环境为目标。有关更多详细信息，请参见[???]()。 Spring Web Flow Travel JSF Portlet 示例已经在 Apache Pluto Portal 容器上成功地进行了测试。