com.opensymphony.xwork2.ActionInvocation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xwork Show documentation
Show all versions of xwork Show documentation
XWork is an command-pattern framework that is used to power WebWork
as well as other applications. XWork provides an Inversion of Control
container, a powerful expression language, data type conversion,
validation, and pluggable configuration.
/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2;
import com.opensymphony.xwork2.interceptor.PreResultListener;
import com.opensymphony.xwork2.util.ValueStack;
import java.io.Serializable;
/**
* An ActionInvocation represents the execution state of an Action. It holds the Interceptors and the Action instance.
* By repeated re-entrant execution of the invoke() method, initially by the ActionProxy, then by the Interceptors, the
* Interceptors are all executed, and then the Action and the Result.
*
* @author Jason Carreira
* @see com.opensymphony.xwork2.ActionProxy
*/
public interface ActionInvocation extends Serializable {
/**
* Get the Action associated with this ActionInvocation
*/
Object getAction();
/**
* @return whether this ActionInvocation has executed before. This will be set after the Action and the Result have
* executed.
*/
boolean isExecuted();
/**
* 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.
*/
ActionContext getInvocationContext();
/**
* Get the ActionProxy holding this ActionInvocation
*/
ActionProxy getProxy();
/**
* If the ActionInvocation 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
* ActionInvocation's result has not been executed before, the Result instance will be created and populated with
* the result params.
*
* @return a Result instance
*/
Result getResult() throws Exception;
/**
* Gets the result code returned from this ActionInvocation
*/
String getResultCode();
/**
* 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 oportunity.
*
*
*
* If this method is called after the Result has been executed, it will
* have the effect of raising an exception.
*
*
* @throws IllegalStateException if called after the Result has been
* executed.
* @see #isExecuted()
*/
void setResultCode(String resultCode);
/**
* @return the ValueStack associated with this ActionInvocation
*/
ValueStack getStack();
/**
* Register a com.opensymphony.xwork2.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.
*/
void addPreResultListener(PreResultListener listener);
/**
* 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.
*/
String invoke() throws Exception;
/**
* 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.
*/
String invokeActionOnly() throws Exception;
/**
* Sets the action event listener to respond to key action events
*/
void setActionEventListener(ActionEventListener listener);
}