Package org.apache.struts2

# Class DefaultActionInvocation

java.lang.Object
org.apache.struts2.DefaultActionInvocation

All Implemented Interfaces:
  `ActionInvocation`

public class DefaultActionInvocation extends Object implements ActionInvocation
The Default ActionInvocation implementation

Version:
  $Date$ $Id$
Author:
  Rainer Hermanns, tmjee
See Also:
  - `DefaultActionProxy`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Object`
  `action`
  `protected ActionEventListener`
  `actionEventListener`
  `protected Callable<?>`
  `asyncAction`
  `protected AsyncManager`
  `asyncManager`
  `protected Container`
  `container`
  `protected boolean`
  `executed`
  `protected Result`
  `explicitResult`
  `protected Map<String,Object>`
  `extraContext`
  `protected Iterator<InterceptorMapping>`
  `interceptors`
  `protected ActionContext`
  `invocationContext`
  `protected WithLazyParams.LazyParamInjector`
  `lazyParamInjector`
  `protected ObjectFactory`
  `objectFactory`
  `protected OgnlUtil`
  `ognlUtil`
  `protected List<PreResultListener>`
  `preResultListeners`
  `protected ActionProxy`
  `proxy`
  `protected boolean`
  `pushAction`
  `protected Result`
  `result`
  `protected String`
  `resultCode`
  `protected ValueStack`
  `stack`
  `protected UnknownHandlerManager`
  `unknownHandlerManager`
  `protected ValueStackFactory`
  `valueStackFactory`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DefaultActionInvocation(Map<String,Object> extraContext, boolean pushAction)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addPreResultListener(PreResultListener listener)`
  Register a org.apache.struts2.interceptor.PreResultListener to be notified after the Action is executed and before the Result is executed.
  `protected void`
  `createAction(Map<String,Object> contextMap)`
  `protected Map<String,Object>`
  `createContextMap()`
  `protected void`
  `createInterceptors(ActionProxy proxy)`
  `Result`
  `createResult()`
  `protected String`
  `executeConditional(ConditionalInterceptor conditionalInterceptor)`
  `Object`
  `getAction()`
  Get the Action associated with this ActionInvocation.
  `ActionContext`
  `getInvocationContext()`
  Gets the ActionContext associated with this ActionInvocation.
  `ActionProxy`
  `getProxy()`
  Get the ActionProxy holding this ActionInvocation.
  `Result`
  `getResult()`
  If the DefaultActionInvocation has been executed before and the Result is an instance of ActionChainResult, this method will walk down the chain of ActionChainResults until it finds a non-chain result, which will be returned.
  `String`
  `getResultCode()`
  Gets the result code returned from this ActionInvocation.
  `ValueStack`
  `getStack()`
  Gets the ValueStack associated with this ActionInvocation.
  `void`
  `init(ActionProxy proxy)`
  `String`
  `invoke()`
  Invokes the next step in processing this ActionInvocation.
  `protected String`
  `invokeAction(Object action, ActionConfig actionConfig)`
  `String`
  `invokeActionOnly()`
  Invokes only the Action (not Interceptors or Results).
  `boolean`
  `isExecuted()`
  Gets whether this ActionInvocation has executed before.
  `protected void`
  `prepareLazyParamInjector(ValueStack valueStack)`
  `protected String`
  `saveResult(ActionConfig actionConfig, Object methodResult)`
  Save the result to be used later.
  `void`
  `setActionEventListener(ActionEventListener listener)`
  Sets the action event listener to respond to key action events.
  `void`
  `setAsyncManager(AsyncManager asyncManager)`
  `void`
  `setContainer(Container cont)`
  `void`
  `setObjectFactory(ObjectFactory fac)`
  `void`
  `setOgnlUtil(OgnlUtil ognlUtil)`
  `void`
  `setResultCode(String resultCode)`
  Sets the result code, possibly overriding the one returned by the action.
  `void`
  `setUnknownHandlerManager(UnknownHandlerManager unknownHandlerManager)`
  `void`
  `setValueStackFactory(ValueStackFactory fac)`

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

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

- ## Field Details

  - ### action

    protected Object action

  - ### proxy

    protected ActionProxy proxy

  - ### preResultListeners

    protected List<PreResultListener> preResultListeners

  - ### extraContext

    protected Map<String,Object> extraContext

  - ### invocationContext

    protected ActionContext invocationContext

  - ### interceptors

    protected Iterator<InterceptorMapping> interceptors

  - ### stack

    protected ValueStack stack

  - ### result

    protected Result result

  - ### explicitResult

    protected Result explicitResult

  - ### resultCode

    protected String resultCode

  - ### executed

    protected boolean executed

  - ### pushAction

    protected boolean pushAction

  - ### objectFactory

    protected ObjectFactory objectFactory

  - ### actionEventListener

    protected ActionEventListener actionEventListener

  - ### valueStackFactory

    protected ValueStackFactory valueStackFactory

  - ### container

    protected Container container

  - ### unknownHandlerManager

    protected UnknownHandlerManager unknownHandlerManager

  - ### ognlUtil

    protected OgnlUtil ognlUtil

  - ### asyncManager

    protected AsyncManager asyncManager

  - ### asyncAction

    protected Callable<?> asyncAction

  - ### lazyParamInjector

    protected WithLazyParams.LazyParamInjector lazyParamInjector

- ## Constructor Details

  - ### DefaultActionInvocation

    public DefaultActionInvocation(Map<String,Object> extraContext, boolean pushAction)

- ## Method Details

  - ### setUnknownHandlerManager

    public void setUnknownHandlerManager(UnknownHandlerManager unknownHandlerManager)

  - ### setValueStackFactory

    public void setValueStackFactory(ValueStackFactory fac)

  - ### setObjectFactory

    public void setObjectFactory(ObjectFactory fac)

  - ### setContainer

    public void setContainer(Container cont)

  - ### setActionEventListener

    public void setActionEventListener(ActionEventListener listener)
    Description copied from interface: `ActionInvocation`
    Sets the action event listener to respond to key action events.
    Specified by:
      `setActionEventListener` in interface `ActionInvocation`
    Parameters:
      `listener` - the listener.

  - ### setOgnlUtil

    public void setOgnlUtil(OgnlUtil ognlUtil)

  - ### setAsyncManager

    public void setAsyncManager(AsyncManager asyncManager)

  - ### getAction

    public Object getAction()
    Description copied from interface: `ActionInvocation`
    Get the Action associated with this ActionInvocation.
    Specified by:
      `getAction` in interface `ActionInvocation`
    Returns:
      the Action

  - ### isExecuted

    public boolean isExecuted()
    Description copied from interface: `ActionInvocation`
    Gets whether this ActionInvocation has executed before. This will be set after the Action and the Result have executed.
    Specified by:
      `isExecuted` in interface `ActionInvocation`
    Returns:
      `true` if this ActionInvocation has executed before.

  - ### getInvocationContext

    public ActionContext getInvocationContext()
    Description copied from interface: `ActionInvocation`
    Gets the ActionContext associated with this ActionInvocation. The ActionProxy is responsible for setting this ActionContext onto the ThreadLocal before invoking the ActionInvocation and resetting the old ActionContext afterwards.
    Specified by:
      `getInvocationContext` in interface `ActionInvocation`
    Returns:
      the ActionContext.

  - ### getProxy

    public ActionProxy getProxy()
    Description copied from interface: `ActionInvocation`
    Get the ActionProxy holding this ActionInvocation.
    Specified by:
      `getProxy` in interface `ActionInvocation`
    Returns:
      the ActionProxy.

  - ### getResult

    public Result getResult() throws Exception
    If the DefaultActionInvocation has been executed before and the Result is an instance of ActionChainResult, this method will walk down the chain of ActionChainResults until it finds a non-chain result, which will be returned. If the DefaultActionInvocation's result has not been executed before, the Result instance will be created and populated with the result params.
    Specified by:
      `getResult` in interface `ActionInvocation`
    Returns:
      a Result instance
    Throws:
      `Exception` - in case of any error

  - ### getResultCode

    public String getResultCode()
    Description copied from interface: `ActionInvocation`
    Gets the result code returned from this ActionInvocation.
    Specified by:
      `getResultCode` in interface `ActionInvocation`
    Returns:
      the result code

  - ### setResultCode

    public void setResultCode(String resultCode)
    Description copied from interface: `ActionInvocation`
    Sets the result code, possibly overriding the one returned by the action.

    The "intended" purpose of this method is to allow PreResultListeners to override the result code returned by the Action.

    If this method is used before the Action executes, the Action's returned result code will override what was set. However the Action could (if specifically coded to do so) inspect the ActionInvocation to see that someone "upstream" (e.g. an Interceptor) had suggested a value as the result, and it could therefore return the same value itself.

    If this method is called between the Action execution and the Result execution, then the value set here will override the result code the action had returned. Creating an Interceptor that implements `PreResultListener` will give you this opportunity.

    If this method is called after the Result has been executed, it will have the effect of raising an IllegalStateException.

    Specified by:
      `setResultCode` in interface `ActionInvocation`
    Parameters:
      `resultCode` - the result code.
    See Also:
      - `ActionInvocation.isExecuted()`

  - ### getStack

    public ValueStack getStack()
    Description copied from interface: `ActionInvocation`
    Gets the ValueStack associated with this ActionInvocation.
    Specified by:
      `getStack` in interface `ActionInvocation`
    Returns:
      the ValueStack

  - ### addPreResultListener

    public void addPreResultListener(PreResultListener listener)
    Register a org.apache.struts2.interceptor.PreResultListener to be notified after the Action is executed and before the Result is executed. The ActionInvocation implementation must guarantee that listeners will be called in the order in which they are registered. Listener registration and execution does not need to be thread-safe.
    Specified by:
      `addPreResultListener` in interface `ActionInvocation`
    Parameters:
      `listener` - to register

  - ### createResult

    public Result createResult() throws Exception
    Throws:
      `Exception`

  - ### invoke

    public String invoke() throws Exception
    Description copied from interface: `ActionInvocation`
    Invokes the next step in processing this ActionInvocation.

    If there are more Interceptors, this will call the next one. If Interceptors choose not to short-circuit ActionInvocation processing and return their own return code, they will call invoke() to allow the next Interceptor to execute. If there are no more Interceptors to be applied, the Action is executed. If the `ActionProxy.getExecuteResult()` method returns `true`, the Result is also executed.

    Specified by:
      `invoke` in interface `ActionInvocation`
    Returns:
      the return code.
    Throws:
      `ConfigurationException` - If no result can be found with the returned code
      `Exception` - can be thrown.

  - ### executeConditional

    protected String executeConditional(ConditionalInterceptor conditionalInterceptor) throws Exception
    Throws:
      `Exception`

  - ### invokeActionOnly

    public String invokeActionOnly() throws Exception
    Description copied from interface: `ActionInvocation`
    Invokes only the Action (not Interceptors or Results).

    This is useful in rare situations where advanced usage with the interceptor/action/result workflow is being manipulated for certain functionality.

    Specified by:
      `invokeActionOnly` in interface `ActionInvocation`
    Returns:
      the return code.
    Throws:
      `Exception` - can be thrown.

  - ### createAction

    protected void createAction(Map<String,Object> contextMap)

  - ### createContextMap

    protected Map<String,Object> createContextMap()

  - ### init

    public void init(ActionProxy proxy)
    Specified by:
      `init` in interface `ActionInvocation`

  - ### prepareLazyParamInjector

    protected void prepareLazyParamInjector(ValueStack valueStack)

  - ### createInterceptors

    protected void createInterceptors(ActionProxy proxy)

  - ### invokeAction

    protected String invokeAction(Object action, ActionConfig actionConfig) throws Exception
    Throws:
      `Exception`

  - ### saveResult

    protected String saveResult(ActionConfig actionConfig, Object methodResult)
    Save the result to be used later.
    Parameters:
      `actionConfig` - current ActionConfig
      `methodResult` - the result of the action.
    Returns:
      the result code to process.