我已经定义了一个拦截器如下:
<package name="default" extends="struts-default" >
<interceptors>
<interceptor-stack name="myStack">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
</package>
然后在另一个命名空间中使用 myStack :
<package name="posts" namespace="/posts" extends="struts-default,json-default">
<action name="question/ask" class="someclass.QuestionAction">
<interceptor-ref name="myStack"></interceptor-ref>
<result name="success">/WEB-INF/jsp/post_question.jsp</result>
<result name="input">/WEB-INF/jsp/post_question.jsp</result>
</action>
</package>
这不起作用,因为在帖子包中,它找不到名为 myStack 的拦截器堆栈。 我该如何解决这个问题?
答案 0 :(得分:8)
让“post”包扩展为“default”将解决问题。
答案 1 :(得分:2)
有两种方法可以在struts.xml中包含拦截器
First:
1)如果你在其他xml文件中编写任何拦截器&amp;你想在struts.xml文件中使用那个拦截器意味着你应该在struts.xml中包含那个文件
例如:考虑other.xml file is file.xml
&amp;你想要包含在struts.xml中,所以,
<struts>
<include file="file.xml"></include>
<package name="posts" namespace="/posts" extends="struts-default,json-default">
<action name="question/ask" class="someclass.QuestionAction">
<interceptor-ref name="myStack"></interceptor-ref>
<result name="success">/WEB-INF/jsp/post_question.jsp</result>
<result name="input">/WEB-INF/jsp/post_question.jsp</result>
</action>
</package>
</struts>
Second Way:
您应该在struts.xml中包含拦截器并在动作类中引用该名称,然后它将正常工作。
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="timer" class=".."/>
<interceptor name="logger" class=".."/>
<interceptor-stack name="myStack">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
</interceptor-stack>
</interceptors>
<action name="login"
class="tutuorial.Login">
<interceptor-ref name="myStack"/>
<result name="input">login.jsp</result>
<result name="success"
type="redirect-action">/secure/home</result>
</action>
</package>
此外,我给出了两个链接,请参阅此链接,例如我仅从这些链接中引用。 Full Interceptors Concept 。 Basic Interceptors