小弟对拦截器有些疑惑,拦截器一般在struts.xml中配置,如下面的代码,是以栈的形式设置的。如果在下面还配置了Action的话,这些拦截器要不要单独的再一个个写到Action中呢?还是框架会自动的调用拦截器栈

<interceptor-stack name="SysDefault">
<interceptor-ref name="ValidateUser" />
</interceptor-stack><action name="pmain" class="GoldNT.Mvc.Controller.LoginAction"> <interceptor-ref name="ValidateUser" />
<result>jsp/MerberManger/MerWorkSpace.jsp</result>
</action

解决方案 »

  1.   

    package可以继承的,先写个:
    <package name="struts-XXX" extends="struts-default, json-default" namespace="/">
    这里定义你全局拦截器
    </package>
    在你其他的package里,想用这个拦截器,就继承你的父package就可以了。
    <package name="login" extends="struts-XXX" namespace="/login">
      

  2.   

    我的拦截器是在一个package里的
    <package name="default" namespace="/" extends="struts-default">
    <interceptor-stack name="SysDefault">
    <interceptor-ref name="ValidateUser" />
    <interceptor-ref name="authInterceptor">
    <param name="excludeMethods">NotNeedAuth*,Save*,OwnerList</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack" />
    </interceptor-stack>
               <action name="pmain" class="GoldNT.Mvc.Controller.LoginAction"> <interceptor-ref name="ValidateUser" />
    <result>jsp/MerberManger/MerWorkSpace.jsp</result>
    </action>
    </package>
      

  3.   

    我一般都是写一个struts.xml,主的struts.xml引用下子的struts-AAA.xml,
    拦截器写到struts.xml里,子的struts-AAA.xml里若想用拦截器,就继承下,不想用就不继承。
      

  4.   

    我的意思是,拦截器需要要一个个写在action里面么?
      

  5.   

    给你看看我写的拦截器: <package name="struts-base" extends="struts-default, json-default" namespace="/">

    <interceptors>
    <interceptor name="loginInterceptor" class="loginInterceptorBean"></interceptor>
    <interceptor-stack name="loginStack">
    <interceptor-ref name="loginInterceptor"></interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
    </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="loginStack"></default-interceptor-ref>

    <global-results>
    <!-- 404 -->
    <result name="notfound">/page/404.jsp</result>
    <!-- error -->
    <result name="error">/page/error.jsp</result>
    <!-- timeout -->
    <result name="timeout">/page/timeout.jsp</result>
    </global-results>

    </package>其他继承下就可以了: <package name="manage" extends="struts-base" namespace="/manage">

    <action name="showDetail" class="fhgameAction" method="showDetail">
    <result name="*">/page/manage/fhdetail.jsp</result>
    </action>

    </package>
      

  6.   

    你的拦截器里,就直接到你的timeout.jsp了,
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
    return "timeout";
    }
      

  7.   

    一个action可以指定用一个具体的拦截器么?
      

  8.   

    可以呀,
    在你的action中,添加:
    <interceptor-ref name="你的拦截器名"></interceptor-ref>
      

  9.   

    如果你的package继承了,
    你还写<interceptor-ref name="你的拦截器名"></interceptor-ref>
    这个就会执行2次拦截,我的意思是,你要不就继承,要不就不继承,自己单独写拦截器。