Package org.apache.struts2.interceptor

# Class MessageStoreInterceptor

java.lang.Object
org.apache.struts2.interceptor.AbstractInterceptor
org.apache.struts2.interceptor.MessageStoreInterceptor

All Implemented Interfaces:
  `Serializable`, `ConditionalInterceptor`, `Interceptor`

public class MessageStoreInterceptor extends AbstractInterceptor

An interceptor to store a `ValidationAware` action's messages / errors and field errors into HTTP Session, such that it will be retrievable at a later stage. This allows the action's message / errors and field errors to be available longer that just the particular HTTP request.

If no session exists, nothing will be stored and can be retrieved later. In other terms, the application is responsible to open the session.

In the 'STORE' mode, the interceptor will store the `ValidationAware` action's message / errors and field errors into HTTP session.

In the 'RETRIEVE' mode, the interceptor will retrieve the stored action's message / errors and field errors and put them back into the `ValidationAware` action.

In the 'AUTOMATIC' mode, the interceptor will always retrieve the stored action's message / errors and field errors and put them back into the `ValidationAware` action, and after Action execution, if the `Result` is an instance of `ServletRedirectResult`, the action's message / errors and field errors into automatically be stored in the HTTP session..

The interceptor does nothing in the 'NONE' mode, which is the default.

The operation mode could be switched using:
1] Setting the interceptor parameter eg.

       <action name="submitApplication" ...>
          <interceptor-ref name="store">
             <param name="operationMode">STORE</param>
          </interceptor-ref>
          <interceptor-ref name="defaultStack" />
          ....
       </action>

2] Through request parameter (allowRequestParameterSwitch must be 'true' which is the default)

       // the request will have the operation mode in 'STORE'
       http://localhost:8080/context/submitApplication.action?operationMode=STORE

- allowRequestParameterSwitch - To enable request parameter that could switch the operation mode of this interceptor.
- requestParameterSwitch - The request parameter that will indicate what mode this interceptor is in.
- operationMode - The operation mode this interceptor should be in (either 'STORE', 'RETRIEVE', 'AUTOMATIC', or 'NONE'). 'NONE' being the default.

The following method could be overridden:

- getRequestOperationMode - get the operation mode of this interceptor based on the request parameters
- mergeCollection - merge two collections
- mergeMap - merge two map

     <action name="submitApplication" ....>
        <interceptor-ref name="store">
          <param name="operationMode">aSTORE</param>
        </interceptor-ref>
        <interceptor-ref name="defaultStack" />
        <result name="input" type="redirect">aapplicationFailed.action</result>
        <result type="dispatcher">applicationSuccess.jsp</result>
     </action>

     <action name="applicationFailed" ....>
        <interceptor-ref name="store">
           <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>
        <result>applicationFailed.jsp</result>
     </action>

With the example above, 'submitApplication.action' will have the action messages / errors / field errors stored in the HTTP Session. Later when needed, (in this case, when 'applicationFailed.action' is fired, it will get the action messages / errors / field errors stored in the HTTP Session and put them back into the action.

See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `actionErrorsSessionKey`
  `static final String`
  `actionMessagesSessionKey`
  `static final String`
  `AUTOMATIC_MODE`
  `static final String`
  `fieldErrorsSessionKey`
  `static final String`
  `NONE`
  `static final String`
  `RETRIEVE_MODE`
  `static final String`
  `STORE_MODE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MessageStoreInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `before(ActionInvocation invocation)`
  Handle the retrieving of field errors / action messages / field errors, which is done before action invocation, and the `operationMode` is 'RETRIEVE'.
  `protected MessageStorePreResultListener`
  `createPreResultListener(ActionInvocation invocation)`
  `boolean`
  `getAllowRequestParameterSwitch()`
  `String`
  `getOperationModel()`
  `protected String`
  `getRequestOperationMode(ActionInvocation invocation)`
  Get the operationMode through request parameter, if `allowRequestParameterSwitch` is 'true', else it simply returns 'NONE', meaning its neither in the 'STORE_MODE' nor 'RETRIEVE_MODE'.
  `String`
  `getRequestParameterSwitch()`
  `String`
  `intercept(ActionInvocation invocation)`
  Override to handle interception
  `protected Collection`
  `mergeCollection(Collection col1, Collection col2)`
  Merge `col1` and `col2` and return the composite `Collection`.
  `protected Map`
  `mergeMap(Map map1, Map map2)`
  Merge `map1` and `map2` and return the composite `Map`
  `void`
  `setAllowRequestParameterSwitch(boolean allowRequestParameterSwitch)`
  `void`
  `setOperationMode(String operationMode)`
  `void`
  `setRequestParameterSwitch(String requestParameterSwitch)`

  ### Methods inherited from class org.apache.struts2.interceptor.AbstractInterceptor

  `destroy, init, setDisabled, shouldIntercept`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### AUTOMATIC_MODE

    public static final String AUTOMATIC_MODE
    See Also:
      - Constant Field Values

  - ### STORE_MODE

    public static final String STORE_MODE
    See Also:
      - Constant Field Values

  - ### RETRIEVE_MODE

    public static final String RETRIEVE_MODE
    See Also:
      - Constant Field Values

  - ### NONE

    public static final String NONE
    See Also:
      - Constant Field Values

  - ### fieldErrorsSessionKey

    public static final String fieldErrorsSessionKey
    See Also:
      - Constant Field Values

  - ### actionErrorsSessionKey

    public static final String actionErrorsSessionKey
    See Also:
      - Constant Field Values

  - ### actionMessagesSessionKey

    public static final String actionMessagesSessionKey
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### MessageStoreInterceptor

    public MessageStoreInterceptor()

- ## Method Details

  - ### setAllowRequestParameterSwitch

    public void setAllowRequestParameterSwitch(boolean allowRequestParameterSwitch)

  - ### getAllowRequestParameterSwitch

    public boolean getAllowRequestParameterSwitch()

  - ### setRequestParameterSwitch

    public void setRequestParameterSwitch(String requestParameterSwitch)

  - ### getRequestParameterSwitch

    public String getRequestParameterSwitch()

  - ### setOperationMode

    public void setOperationMode(String operationMode)

  - ### getOperationModel

    public String getOperationModel()

  - ### intercept

    public String intercept(ActionInvocation invocation) throws Exception
    Description copied from class: `AbstractInterceptor`
    Override to handle interception
    Specified by:
      `intercept` in interface `Interceptor`
    Specified by:
      `intercept` in class `AbstractInterceptor`
    Parameters:
      `invocation` - the action invocation
    Returns:
      the return code, either returned from `ActionInvocation.invoke()`, or from the interceptor itself.
    Throws:
      `Exception` - any system-level error, as defined in `Action.execute()`.

  - ### createPreResultListener

    protected MessageStorePreResultListener createPreResultListener(ActionInvocation invocation)

  - ### before

    protected void before(ActionInvocation invocation) throws Exception
    Handle the retrieving of field errors / action messages / field errors, which is done before action invocation, and the `operationMode` is 'RETRIEVE'.
    Parameters:
      `invocation` - the action invocation
    Throws:
      `Exception` - in case of any error

  - ### getRequestOperationMode

    protected String getRequestOperationMode(ActionInvocation invocation)
    Get the operationMode through request parameter, if `allowRequestParameterSwitch` is 'true', else it simply returns 'NONE', meaning its neither in the 'STORE_MODE' nor 'RETRIEVE_MODE'.
    Parameters:
      `invocation` - the action invocation
    Returns:
      the request operation mode

  - ### mergeCollection

    protected Collection mergeCollection(Collection col1, Collection col2)
    Merge `col1` and `col2` and return the composite `Collection`.
    Parameters:
      `col1` - first collection
      `col2` - second collection
    Returns:
      the merged collection

  - ### mergeMap

    protected Map mergeMap(Map map1, Map map2)
    Merge `map1` and `map2` and return the composite `Map`
    Parameters:
      `map1` - first map
      `map2` - second map
    Returns:
      the merged map