Invokes any annotated methods on the action. Specifically, it supports the following annotations:
- @ {@link Before} - will be invoked before the action method. If the returned value is not null, it isreturned as the action result code
- @ {@link BeforeResult} - will be invoked after the action method but before the result execution
- @ {@link After} - will be invoked after the action method and result execution
There can be multiple methods marked with the same annotations, but the order of their execution is not guaranteed. However, the annotated methods on the superclass chain are guaranteed to be invoked before the annotated method in the current class in the case of a {@link Before} annotations and after, if the annotations is{@link After}.
public class BaseAnnotatedAction { protected String log = ""; @Before public String baseBefore() { log = log + "baseBefore-"; return null; } } public class AnnotatedAction extends BaseAnnotatedAction { @Before public String before() { log = log + "before"; return null; } public String execute() { log = log + "-execute"; return Action.SUCCESS; } @BeforeResult public void beforeResult() throws Exception { log = log +"-beforeResult"; } @After public void after() { log = log + "-after"; } }
With the interceptor applied and the action executed on AnnotatedAction
the log instance variable will contain baseBefore-before-execute-beforeResult-after
.
Configure a stack in xwork.xml that replaces the PrepareInterceptor with the AnnotationWorkflowInterceptor:
<interceptor-stack name="annotatedStack"> <interceptor-ref name="staticParams"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> <interceptor-ref name="annotationWorkflow"/> </interceptor-stack>
@author Zsolt Szasz, zsolt at lorecraft dot com
@author Rainer Hermanns
@author Dan Oxlade, dan d0t oxlade at gmail d0t c0m