我在我的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"/>
”堆栈,正确调用准备方法?
答案 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>