public class AnnotatedAction extends AnnotatedObject implements Action
Action
implementation for
use within a specific Action execution context, for example an ActionState
definition, a
TransitionCriteria
definition, or in a test environment.
An annotated action is an action that wraps another action (referred to as the target action), setting up the
target action's execution attributes before invoking Action.execute(org.springframework.webflow.execution.RequestContext)
.
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
METHOD_ATTRIBUTE
The action execution method attribute ("method").
|
static java.lang.String |
NAME_ATTRIBUTE
The action name attribute ("name").
|
CAPTION_PROPERTY, DESCRIPTION_PROPERTY
Constructor and Description |
---|
AnnotatedAction(Action targetAction)
Creates a new annotated action object for the specified action.
|
Modifier and Type | Method and Description |
---|---|
Event |
execute(RequestContext context)
Execute this action.
|
java.lang.String |
getMethod()
Returns the name of the action method to invoke when the target action is executed.
|
java.lang.String |
getName()
Returns the name of a named action, or
null if the action is unnamed. |
Action |
getTargetAction()
Returns the wrapped target action.
|
boolean |
isNamed()
Returns whether or not the wrapped target action is a named action.
|
protected Event |
postProcessResult(Event resultEvent)
Get the event id to be used as grounds for a transition in the containing state, based on given result returned
from action execution.
|
AnnotatedAction |
putAttribute(java.lang.String attributeName,
java.lang.Object attributeValue)
Set an attribute on this annotated object.
|
void |
setMethod(java.lang.String method)
Sets the name of the action method to invoke when the target action is executed.
|
void |
setName(java.lang.String name)
Sets the name of a named action.
|
void |
setTargetAction(Action targetAction)
Set the target action wrapped by this decorator.
|
java.lang.String |
toString() |
getAttributes, getCaption, getDescription, setCaption, setDescription
public static final java.lang.String NAME_ATTRIBUTE
The name attribute is often used as a qualifier for an action's result event, and is typically used to allow the flow to respond to a specific action's outcome within a larger action execution chain.
public static final java.lang.String METHOD_ATTRIBUTE
The method property is a hint about what method should be invoked.
public AnnotatedAction(Action targetAction)
targetAction
- the actionpublic Action getTargetAction()
public void setTargetAction(Action targetAction)
public java.lang.String getName()
null
if the action is unnamed. Used when mapping action
result events to transitions.isNamed()
,
postProcessResult(Event)
public void setName(java.lang.String name)
null
.name
- the action namepublic boolean isNamed()
getName()
,
setName(String)
public java.lang.String getMethod()
public void setMethod(java.lang.String method)
method
- the action method namepublic AnnotatedAction putAttribute(java.lang.String attributeName, java.lang.Object attributeValue)
attributeName
- the name of the attribute to setattributeValue
- the value of the attributepublic Event execute(RequestContext context) throws java.lang.Exception
Action
Action invocation is typically triggered in a production environment by a state within a flow carrying out the execution of a flow definition. The result of action execution, a logical outcome event, can be used as grounds for a transition out of the calling state.
Note: The RequestContext
argument to this method provides access to data about the active flow execution
in the context of the currently executing thread. Among other things, this allows this action to access
data
set by other actions, as well as set its own attributes it wishes
to expose in a given scope.
Some notes about actions and their usage of the attribute scope types:
request scope
exist for the life of the currently
executing request only.
flash scope
exist until the next external user
event is signaled. That time includes the current request plus any redirect or additional refreshes to the next
view.
flow scope
exist for the life of the flow session
and will be cleaned up automatically when the flow session ends.
conversation scope
exist for the life of the
entire flow execution representing a single logical "conversation" with a user.
All attributes present in any scope are typically exposed in a model for access by a view when an "interactive" state type such as a view state is entered.
Note: flow scope should generally not be used as a general purpose cache, but rather as a context for data needed locally by other states of the flow this action participates in. For example, it would be inappropriate to stuff large collections of objects (like those returned to support a search results view) into flow scope. Instead, put such result collections in request scope, and ensure you execute this action again each time you wish to view those results. 2nd level caches managed outside of SWF are more general cache solutions.
Note: as flow scoped attributes are eligible for serialization they should be Serializable
.
execute
in interface Action
context
- the action execution context, for accessing and setting data in a scope type
,
as well as obtaining other flow contextual information (e.g. request context attributes and flow execution
context information)java.lang.Exception
- a exception occurred during action execution, either checked or unchecked; note, any
recoverable exceptions should be caught within this method and an appropriate result outcome returned
or be handled by the current state of the calling flow execution.protected Event postProcessResult(Event resultEvent)
If the wrapped action is named, the name will be used as a qualifier for the event (e.g. "myAction.success").
resultEvent
- the action result eventpublic java.lang.String toString()
toString
in class java.lang.Object