AnnotationWorkflowInterceptor Interceptor
Invokes any annotated methods on the action. Specifically, it supports the following
annotations:
- @Before - will be invoked before the action method. If the returned value is not null, it is
returned as the action result code
- @BeforeResult - will be invoked after the action method but before the result execution
- @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 Before annotations and after, if the annotations is
After.
Examples
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";
}
}
Configure a stack in xwork.xml that replaces the PrepareInterceptor with the AnnotationWorkflowInterceptor:
<interceptor-stack name="annotatedStack">
<interceptor-ref name="static-params"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="annotationInterceptor"/>
</interceptor-stack>
Given an Action, AnnotatedAction, add a reference to the AnnotationWorkflowInterceptor interceptor.
<action name="AnnotatedAction" class="com.examples.AnnotatedAction">
<interceptor-ref name="annotationInterceptor"/>
<result name="success" type="freemarker">good_result.ftl</result>
</action>
With the interceptor applied and the action executed on AnnotatedAction the log
instance variable will contain baseBefore-before-execute-beforeResult-after .
|