close

Spring Web Flow

2.5.1.RELEASE

Spring Web Flow builds on Spring MVC and allows implementing the "flows" of a web application. A flow encapsulates a sequence of steps that guide a user through the execution of some business task. It spans multiple HTTP requests, has state, deals with transactional data, is reusable, and may be dynamic and long-running in nature.

The sweet spot for Spring Web Flow are stateful web applications with controlled navigation such as checking in for a flight, applying for a loan, shopping cart checkout, or even adding a confirmation step to a form. What these scenarios have in common is one or more of the following traits:

  • There is a clear start and an end point.

  • The user must go through a set of screens in a specific order.

  • The changes are not finalized until the last step.

  • Once complete it shouldn’t be possible to repeat a transaction accidentally

Spring Web Flow provides a declarative flow definition language for authoring flows on a higher level of abstraction. It allows it to be integrated into a wide range of applications without any changes (to the flow programming model) including Spring MVC, JSF, and even Portlet web applications. The following are common issues observed in stateful web applications with navigation requirements:

  • Visualizing the flow is very difficult.

  • The application has a lot of code accessing the HTTP session.

  • Enforcing controlled navigation is important but not possible.

  • Proper browser back button support seems unattainable.

  • Browser and server get out of sync with "Back" button use.

  • Multiple browser tabs causes concurrency issues with HTTP session data.

  • Spring Web Flow provides a solution to the above issues.

Spring Boot Config

To use Spring Web Flow, add the following dependency to your application.

Maven
<dependencies>
    <dependency>
        <groupId>org.springframework.webflow</groupId>
        <artifactId>spring-webflow</artifactId>
        <version>2.5.1.RELEASE</version>
    </dependency>
</dependencies>
Gradle
dependencies {
    compile 'org.springframework.webflow:spring-webflow:2.5.1.RELEASE'
}
Spring Initializr

Quickstart Your Project

Bootstrap your application with Spring Initializr.

Documentation

Each Spring project has its own; it explains in great details how you can use project features and what you can achieve with them.
2.5.1.RELEASE CURRENT GA Reference Doc. API Doc.
2.4.5.RELEASE GA Reference Doc. API Doc.

A few examples to try out: