struts2拦截器堆栈

时间:2010-10-21 12:01:23

标签: java struts2 interceptor interceptorstack

我在我的struts.xml中编写了这个拦截器堆栈

<interceptor-stack name="project-interceptors-stack">                                               
    <interceptor-ref name="my1-i" />
    <interceptor-ref name="my2-i" />                
    <interceptor-ref name="paramsPrepareParamsStack" /> 
    <interceptor-ref name="logger" />
    <interceptor-ref name="timer" />
</interceptor-stack>

其中my1-i和my2-i是我的自定义拦截器。 我不使用这个拦截器

<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="validation">

但是,我的行动,可预制,ModelDriven和Validateable工作得很好......为什么?

后续行动:我省略了一个重要细节:拦截器堆栈在第一个包中定义,并由所有子包继承。

更准确地说,我想问一下:如果我的操作实现了可预订,并且我的自定义中没有拦截器“ <interceptor-ref name="prepare"/> ”堆栈,正确调用准备方法?

2 个答案:

答案 0 :(得分:1)

你对此有何意义?

  

我的行为,是可以预见的,   ModelDriven和Validateable工作得很好

您的意思是拦截器似乎已应用,例如,是否应用了声明性验证? (你可以检查每个标准拦截器应该做什么here

如果是这样,您应该检查您的堆栈是否在您的操作中有效使用,方法是在操作映射中指定它,或globally(您发布的代码只是定义堆栈)。

答案 1 :(得分:0)

这些包含在paramsPrepareParamsStack中。下面是根据struts-default.xml,

的定义
<interceptor-stack name="paramsPrepareParamsStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="i18n"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="datetime"/>
            <interceptor-ref name="multiselect"/>
            <interceptor-ref name="params"/>
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="chain"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params"/>
            <interceptor-ref name="conversionError"/>
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
            <interceptor-ref name="workflow">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
        </interceptor-stack>