1. 概述
Spring Web Flow 基於 Spring MVC,允許在 Web 應用程序中實現流程。它用於創建用户通過流程或業務邏輯而執行的一系列步驟。
在本快速教程中,我們將通過一個簡單的 用户激活流程示例。用户將看到一個頁面並點擊 激活 按鈕以繼續操作,或點擊 取消 按鈕以取消激活。
這裏假設我們已經設置好了一個 Spring MVC Web 應用程序。
2. 安裝準備
讓我們首先將 Spring Web Flow 依賴添加到 <em >pom.xml</em> 中:
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>3.0.0</version>
</dependency>Spring Web Flow 的最新版本可以在 中央 Maven 倉庫 中找到。
3. 創建流程
現在我們將創建一個簡單的流程。正如之前所述,流程是指引導用户完成過程的一系列步驟。 目前,只能使用基於XML的配置來實現。
流程中的每個步驟稱為一個“狀態”。
對於這個簡單的示例,我們將使用一個“視圖狀態”。“視圖狀態”是流程中的一個步驟,它會渲染一個匹配的視圖。 “視圖狀態”指的是應用程序中的一個頁面(WEB-INF/view),其id是“視圖狀態”的名稱,即它所指向的頁面的名稱。
我們還將使用“過渡”元素。 “過渡”元素用於處理在特定“狀態”中發生的事件。
對於這個流程示例,我們將設置三個“視圖狀態”——“激活”、“成功”和“失敗”。
這個流程的過程相當簡單。起始點是“激活”視圖。如果觸發“激活”事件,它應該過渡到“成功”視圖。如果觸發“取消”事件,它應該過渡到“失敗”視圖。 “過渡”元素處理在“視圖狀態”中的按鈕點擊事件:
<view-state id="activation">
<transition on="activate" to="success"/>
<transition on="cancel" to="failure"/>
</view-state>
<view-state id="success" />
<view-state id="failure" />初始激活頁面,通過 id activation 引用,位於 WEB-INF/view/activation.jsp,是一個簡單的頁面,包含兩個按鈕:activate 和 cancel。點擊這些按鈕將觸發我們向成功view-state (WEB-INF/view/success.jsp) 或失敗view-state (WEB-INF/view/failure.jsp) 切換用户。
<body>
<h2>Click to activate account</h2>
<form method="post" action="${flowExecutionUrl}">
<input type="submit" name="_eventId_activate" value="activate" />
<input type="submit" name="_eventId_cancel" value="cancel" />
</form>
</body>我們正在使用 flowExecutionUrl 訪問當前流程執行的上下文相關的 URI 以及 view-state。
4. 配置流程
接下來,我們將 Spring Web Flow 配置到我們的 Web 環境中。 這將通過設置 Flow Registry 和 Flow Builder Service 來實現。
Flow Registry 允許我們指定流程的位置,並指定是否使用 Flow Builder Service。
Flow Builder Service 幫助我們自定義用於構建流程的服務和設置。
我們可以自定義的一個服務是 view-factory-creator。 view-factory-creator 允許我們自定義 Spring Web Flow 使用的 ViewFactoryCreator。 鑑於我們使用 Spring MVC,我們可以配置 Spring Web Flow 以使用 Spring MVC 配置中的視圖解析器。
以下是如何為我們的示例配置 Spring Web Flow 的方法:
@Configuration
public class WebFlowConfig extends AbstractFlowConfiguration {
@Autowired
private WebMvcConfig webMvcConfig;
@Bean
public FlowDefinitionRegistry flowRegistry() {
return getFlowDefinitionRegistryBuilder(flowBuilderServices())
.addFlowLocation("/WEB-INF/flows/activation-flow.xml", "activationFlow")
.build();
}
@Bean
public FlowExecutor flowExecutor() {
return getFlowExecutorBuilder(flowRegistry()).build();
}
@Bean
public FlowBuilderServices flowBuilderServices() {
return getFlowBuilderServicesBuilder()
.setViewFactoryCreator(mvcViewFactoryCreator())
.setDevelopmentMode(true).build();
}
@Bean
public MvcViewFactoryCreator mvcViewFactoryCreator() {
MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator();
factoryCreator.setViewResolvers(
Collections.singletonList(this.webMvcConfig.viewResolver()));
factoryCreator.setUseSpringBeanBinding(true);
return factoryCreator;
}
}我們還可以使用XML來進行這種配置:
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="flowRegistry" ref="activationFlowRegistry"/>
</bean>
<flow:flow-builder-services id="flowBuilderServices"
view-factory-creator="mvcViewFactoryCreator"/>
<bean id="mvcViewFactoryCreator"
class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
<property name="viewResolvers" ref="jspViewResolver"/>
</bean>
<flow:flow-registry id="activationFlowRegistry"
flow-builder-services="flowBuilderServices">
<flow:flow-location id="activationFlow" path="/WEB-INF/flows/activation-flow.xml"/>
</flow:flow-registry>
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="activationFlowExecutor"/>
</bean>
<flow:flow-executor id="activationFlowExecutor"
flow-registry="activationFlowRegistry"/>5. 瀏覽流程
要瀏覽流程,啓動 Web 應用並前往 http://localhost:8080/{context-path}/activationFlow。要啓動應用,請將其部署在應用程序服務器上,例如 Tomcat 或 Jetty。
這將帶我們到流程的初始頁面,即根據流程配置中指定的 激活 頁面:
您可以通過點擊 激活 按鈕前往成功頁面:
或點擊 取消 按鈕前往失敗頁面:
6. 結論
在本文中,我們使用了一個簡單的示例作為指導,説明如何使用 Spring Web Flow。