如何使用struts 2中不同包中定义的拦截器?

时间:2013-01-27 02:49:15

标签: struts2 interceptor interceptorstack

我已经定义了一个拦截器如下:

<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 的拦截器堆栈。 我该如何解决这个问题?

2 个答案:

答案 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.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