...
Code Block |
---|
|
<action name="formProcessing" class="lesson04_01_01.FormProcessingAction">
<result name="input" type="dispatcher">ex01-index.jsp</result>
<result name="success" type="dispatcher">ex01-success.jsp</result>
<interceptor-ref name="validationWorkflowStack" />
</action>
|
As you can see, lesson 4.1.1's formProcessing
Action uses the validationWorkflowStack
. That is an interceptor stack, which organizes a bunch of interceptors in the order in which they are to be executed. That stack is configured in webwork-default.xml
, so all we have to do to use it is declare a <interceptor-ref />
under the action configuration or a <default-interceptor-ref />
, under package configuration, as seen in lesson 3's first example:
...
Code Block |
---|
|
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<!-- Include webwork defaults (from WebWork JAR). -->
<include file="webwork-default.xml" />
<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<!-- Default interceptor stack. -->
<default-interceptor-ref name="defaultStack" />
<!-- Action: Lesson 03: HelloWebWorldAction. -->
<action name="helloWebWorld" class="lesson03.HelloWebWorldAction">
<result name="success" type="dispatcher">ex01-success.jsp</result>
</action>
</package>
</xwork>
|
But let's see how it works from scracth:
...
Code Block |
---|
|
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<package name="webwork-default">
<result-types>
<result-type name="dispatcher" default="true"
class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult"/>
<result-type name="redirect"
class="com.opensymphony.webwork.dispatcher.ServletRedirectResult"/>
<result-type name="velocity"
class="com.opensymphony.webwork.dispatcher.VelocityResult"/>
<result-type name="chain"
class="com.opensymphony.xwork.ActionChainResult"/>
<result-type name="xslt"
class="com.opensymphony.webwork.views.xslt.XSLTResult"/>
</result-types>
<interceptors>
<interceptor name="timer"
class="com.opensymphony.xwork.interceptor.TimerInterceptor"/>
<interceptor name="logger"
class="com.opensymphony.xwork.interceptor.LoggingInterceptor"/>
<interceptor name="chain"
class="com.opensymphony.xwork.interceptor.ChainingInterceptor"/>
<interceptor name="static-params"
class="com.opensymphony.xwork.interceptor.StaticParametersInterceptor"/>
<interceptor name="params"
class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/>
<interceptor name="model-driven"
class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor"/>
<interceptor name="component"
class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>
<interceptor name="token"
class="com.opensymphony.webwork.interceptor.TokenInterceptor"/>
<interceptor name="token-session"
class="com.opensymphony.webwork.interceptor.TokenSessionStoreInterceptor"/>
<interceptor name="validation"
class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
<interceptor name="workflow"
class="com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor"/>
<interceptor name="servlet-config"
class="com.opensymphony.webwork.interceptor.ServletConfigInterceptor"/>
<interceptor name="prepare"
class="com.opensymphony.xwork.interceptor.PrepareInterceptor"/>
<interceptor name="conversionError"
class="com.opensymphony.webwork.interceptor.WebWorkConversionErrorInterceptor"/>
<interceptor-stack name="defaultStack">
<interceptor-ref name="static-params"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
<interceptor-stack name="validationWorkflowStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
</package>
</xwork>
|
...
Code Block |
---|
|
package lesson05;
import java.util.Calendar;
import com.opensymphony.xwork.interceptor.Interceptor;
import com.opensymphony.xwork.ActionInvocation;
public class GreetingInterceptor implements Interceptor {
public void init() { }
public void destroy() { }
public String intercept(ActionInvocation invocation) throws Exception {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
String greeting = (hour < 6) ? "Good evening" :
((hour < 12) ? "Good morning":
((hour < 18) ? "Good afternoon": "Good evening"));
invocation.getInvocationContext().getSession().put("greeting", greeting);
String result = invocation.invoke();
return result;
}
}
|
...
Code Block |
---|
|
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<!-- Include webwork defaults (from WebWork JAR). -->
<include file="webwork-default.xml" />
<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<interceptors>
<interceptor name="greeting" class="section02.lesson05.GreetingInterceptor" />
</interceptors>
<!-- Action: Lesson 5: GreetingInterceptor. -->
<action name="greetingAction" class="lesson05.GreetingAction">
<result name="success" type="velocity">ex01-result.vm</result>
<interceptor-ref name="greeting" />
</action>
</package>
</xwork>
|
GreetingAction.java:
...