当前位置: 代码迷 >> Java Web开发 >> struts2 拦截器有关问题,求教!
  详细解决方案

struts2 拦截器有关问题,求教!

热度:10536   发布时间:2013-02-25 21:09:44.0
struts2 拦截器问题,求教!~~~
struts2.xml:
XML code
 <package name="order" extends="authInterceptor" namespace="/order">

authInterceptor.xml:
XML code
<!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <package name="authInterceptor" extends="base-struts-json">        <!-- 自定义拦截器,实现用户校验 -->        <interceptors>            <interceptor name="authInterceptor" class="cn.sccl.web.action.usercenter.AuthInterceptor"></interceptor>            <interceptor-stack name="mydefaultStack">                <interceptor-ref name="authInterceptor"></interceptor-ref>                <interceptor-ref name="defaultStack"></interceptor-ref>            </interceptor-stack>        </interceptors>        <default-interceptor-ref name="mydefaultStack"/>    </package></struts>

base-struts-json.xml:
XML code
<struts>    <include file="struts-plugin.xml" />    <package name="base-struts-json" extends="menu">                <!-- 全局逻辑视图 -->        <global-results>            <result name="relogin">/WEB-INF/relogin.jsp</result>            <result name="error_validate">/WEB-INF/jsp/usercenter/user_validate.jsp</result>            <result name="sysException">/common/exception/sysexception.jsp</result>            <result name="exception">/common/exception/abnormalTip.jsp</result>                    </global-results>        <!-- 自定义异常 -->        <global-exception-mappings>            <exception-mapping exception="cn.sccl.common.exception.SystemException" result="sysException" />            <exception-mapping exception="java.lang.Exception" result="exception" />        </global-exception-mappings>            </package></struts>

menu.xml:
XML code
<struts>    <package name="menu" extends="json-default">        <!-- 自定义拦截器,快速导航 -->        <interceptors>            <interceptor name="menu" class="cn.sccl.web.action.usercenter.menuInterceptor"></interceptor>            <interceptor-stack name="mydefaultStack">                <interceptor-ref name="menu"></interceptor-ref>                <interceptor-ref name="defaultStack"></interceptor-ref>            </interceptor-stack>        </interceptors>        <default-interceptor-ref name="mydefaultStack"/>    </package></struts>


以上就是拦截器之间的关系:order包继承authInterceptor包,authInterceptor包继承base-struts-json,base-struts-json继承menu,现在我的问题是,order包继承了authInterceptor,这个是执行了的,但是为什么menu没有执行?求教~~~

------解决方案--------------------------------------------------------
在struts配置文件中只能有一个default-interceptor-ref, 子包中的配置会覆盖父包中的配置,order包继承了authInterceptor包,但是没有重新定义default-interceptor-ref, 因此authInterceptor包中的default-interceptor-ref仍然有效,会执行。menu包中定义的default-interceptor-ref被覆盖,所以不会执行。
  相关解决方案