在Struts2的demo項目中添加了一個簡單的攔截器,突然發現,Action中取不到頁面的參數了
這也是很蛋疼的事情,還好這個比較簡單,稍微一查就發現問題:
Struts2中很多的功能是用攔截器實現的,比如:取得表單參數,文件上傳,異常處理等
Struts2會默認調用默認的攔截器,默認攔截器配置在struts-default.xml中可以查看
如果在配置文件中加入了自定義的攔截器,那默認的攔截器就不會起作用,在Action中就不能取得表單的參數
這個時候,就需要顯試的調用默認的攔截器(defaultStack)
配置如下:
<action name="LoginAction" method="login" class="com.venn.action.LoginAction">
<result>/jsp/success.jsp</result>
<result name="input">/jsp/login.jsp</result>
<interceptor-ref name="defaultStack"/> <!--注意順序,先調用默認的攔截器-->
<interceptor-ref name="myDefault"/>
</action>
也可以使用攔截器棧:
<struts>
<package name="default" namespace="/" extends="struts-default">
<!-- login interceptor -->
<interceptors>
<interceptor name="timerInterceptor" class="com.venn.interceptor.TimerInterceptor"></interceptor>
<interceptor-stack name="myDefault">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="timerInterceptor"/>
</interceptor-stack>
</interceptors>
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/jsp/error.jsp</result>
</action>
<action name="LoginAction" method="login" class="com.venn.action.LoginAction">
<result>/jsp/success.jsp</result>
<result name="input">/jsp/login.jsp</result>
<interceptor-ref name="myDefault"/>
</action>
</package>
</struts>
