知識庫 / Spring / Spring MVC RSS 訂閱

Spring Web Flow 指南

Spring MVC
HongKong
4
02:34 PM · Dec 06 ,2025

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,是一個簡單的頁面,包含兩個按鈕:activatecancel。點擊這些按鈕將觸發我們向成功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-creatorview-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。

這將帶我們到流程的初始頁面,即根據流程配置中指定的 激活 頁面:

&nbsp;

您可以通過點擊 激活 按鈕前往成功頁面:

或點擊 取消 按鈕前往失敗頁面:

6. 結論

在本文中,我們使用了一個簡單的示例作為指導,説明如何使用 Spring Web Flow。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.