小弟对拦截器有些疑惑,拦截器一般在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
?
<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
<package name="struts-XXX" extends="struts-default, json-default" namespace="/">
这里定义你全局拦截器
</package>
在你其他的package里,想用这个拦截器,就继承你的父package就可以了。
<package name="login" extends="struts-XXX" namespace="/login">
<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>
拦截器写到struts.xml里,子的struts-AAA.xml里若想用拦截器,就继承下,不想用就不继承。
<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>
@Override
public String intercept(ActionInvocation arg0) throws Exception {
return "timeout";
}
在你的action中,添加:
<interceptor-ref name="你的拦截器名"></interceptor-ref>
你还写<interceptor-ref name="你的拦截器名"></interceptor-ref>
这个就会执行2次拦截,我的意思是,你要不就继承,要不就不继承,自己单独写拦截器。