org.apache.struts2.interceptor

## Class MessageStoreInterceptor

- java.lang.Object
- - org.apache.struts2.interceptor.AbstractInterceptor
  - - com.opensymphony.xwork2.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

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.opensymphony.xwork2.interceptor.ConditionalInterceptor

      `ConditionalInterceptor.LegacyAdapter`

  - ### Field Summary

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

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MessageStoreInterceptor()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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 com.opensymphony.xwork2.interceptor.AbstractInterceptor

      `intercept, shouldIntercept, shouldIntercept`

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

      `destroy, init, setDisabled`

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

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

    - ### Methods inherited from interface com.opensymphony.xwork2.interceptor.ConditionalInterceptor

      `adapt`

    - ### Methods inherited from interface com.opensymphony.xwork2.interceptor.Interceptor

      `adapt`

    - ### Methods inherited from interface org.apache.struts2.interceptor.Interceptor

      `destroy, init`

- - ### Field Detail

    - #### 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 Detail

    - #### MessageStoreInterceptor

          public MessageStoreInterceptor()

  - ### Method Detail

    - #### 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 class `AbstractInterceptor`
      Throws:
        `Exception`

    - #### 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

Copyright © 2000–2026 Apache Software Foundation. All rights reserved.