Spring Web Flow is a Spring MVC extension that 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.
Maven artifacts are available in the Maven Central repository. For milestone and snapshot releases, you'll need to add this SpringSource repository to your Maven configuration:
<name>Spring Maven Releases, Milestones, and Snapshots</name>
Then add the following dependency to your pom.xml:
For JavaServer Faces applications add this dependency instead:
Spring Web Flow 2.3.2 is the current production release (requires Java 1.5+)
Download | Changelog
Spring Web Flow 1.0.6 is the latest Web Flow 1.0.x release (compatible with Java 1.3+)
Download | Changelog | Announcement
Spring Web Flow nightly snapshots are available for testing and development purposes
Spring Web Flow 2.3 (current production version 2.3.2)
Spring Web Flow 1.0 (production version 1.0.6)