Spring WebFlow
Spring WebFlow is a Spring add-on which handles the navigation around one sequence of interactions (conversation, workflow) within your web site. You don’t have to be using Spring MVC to use it, but you do need Spring core.
The important question first: Why bother with Spring WebFlow? And, What Spring Webflow offers JSF developers
Flow Language
The Flow Definition consists of states, transitions, inputs/outputs, outcomes. Course G978: See page 8-17 to 8-25.
Flow Language: variables and scopes
WebFlow defines variables and several useful scopes: Flow, View and Conversation. See Spring WebFlow Reference, Section 9.
Main Classes
WebFlow Configuration has a lot of moving parts! SIX main classes/interfaces. Not all pieces need to be spelled out for all applications!
Hint: Classes in org.springframework.web.servlet.mvc are standard Spring MVC; classes in org.springframework.webflow.mvc are part of WebFlow!
FlowHandlerAdapter |
These exist even in "standard" Spring MVC; used by the DispatcherServlet to hand requests off to e.g., your @Controller classes. Delegates work to the mapped FlowHandler. If you define the WebFlow version, the others don’t get mapped (so regular requests in the same webapp will fail), unless you also define the standard ones (listed on pg 8-9). |
FlowHandlerMapping |
HandlerMapping that creates a URL from information in the flow registry. Makes and returns a FlowHandler if a matching id is found in the flow registry. |
FlowRegistry |
Contains the actual flow definitions, which are usually in files because they are too long to put in ApplicationContext.xml |
FlowHandler |
Controller helper that has the reference to the actual flow. Manages the execution of the flow (using FlowExecutor), outcomes and even exceptions. Use standard one, or extend AbstractFlowHandler to override how some of these are handled. |
FlowExecutor |
Does the actual execution/interpretation of the flow. Creates new flow instances and resumes existing flows. |
FlowDefinition |
Stores the definition of one flow. |