Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

A Struts2

Excerpt

plugin for creating wizards (action flows)

.

Features Overview

  • Simple integration to new or existing Struts2 application
  • Automatic use of Post/Redirect/Get pattern to avoid duplicate form submissions
  • Proper handling of browser back and refresh buttons
  • Action flow scope to keep data, there is no need to use scoped model-driven
    actions

Installation

Copy struts2-actionflow-plugin-x.x.x.jar into your classpath WEB-INF/lib. No other files need to be copied or created.

...

Code Block
xml
xml
<dependencies>
    ...
    <dependency>
        <groupId>com.amashchenko.struts2.actionflow</groupId>
        <artifactId>struts2-actionflow-plugin</artifactId>
        <version>1<version>2.50.5<0</version>
    </dependency>
    ...
</dependencies>

Example Usage

1. Install it by adding this plug-in dependency to your POM or by copying jar into /WEB-INF/lib directory.
2. Make your action package extend actionflow-default package.
3. Add <param name="actionFlowStep"> parameters to actions you want to include in action flows. (NOTE: the action must have an input result!)
4. Use next and prev actions in JSP to move between wizard steps.
5. Use @ActionFlowScope annotation on action classes and fields in order to keep data in action flow scope.

Action Mappings

Code Block
xml
xml
<package name="actionflow-showcase" namespace="/" extends="actionflow-default">

    <action name="saveName" method="saveName" class="com.example.FlowAction">
        <param name="actionFlowStep">1</param>

        <result name="input">/WEB-INF/pages/name.jsp</result>
        <result name="error">/WEB-INF/pages/name.jsp</result>
        <result>/WEB-INF/pages/name-success.jsp</result>
    </action>
    <action name="savePhone" method="savePhone" class="com.example.FlowAction">
        <param name="actionFlowStep">2</param>

        <result name="input">/WEB-INF/pages/phone.jsp</result>
        <result name="error">/WEB-INF/pages/phone.jsp</result>
        <result>/WEB-INF/pages/phone-success.jsp</result>
    </action>

</package>

...

Code Block
xml
xml
<s:form action="next">
   <s:hidden name="step" value="%{#session['actionFlowPreviousAction']}" />

   <s:textfield key="name" label="Name" />
   <s:submit value="previous" action="prev" />
   <s:submit value="next" action="next" />
</s:form>

Note: Since Struts2 version 2.3.15.3 if you are using <s:submit> tags with action attribute you need to enable support for action: prefix.

Put that in your struts.xml file:

Code Block
xml
xml

<constant name="struts.mapper.action.prefix.enabled" value="true" />

Action

Code Block
java
java

@ActionFlowScope
public class FlowAction extends ActionSupport {
    @ActionFlowScope
    private String name;
}