0
我有一個登錄攔截器,它檢查會話成員對象,如果它是空的重定向到登錄頁面,否則繼續行動。struts2攔截器重定向兩次到動作
每個動作塊都有這個攔截器。問題是,當你調用動作時它會觸發攔截器,如果它是真的繼續動作方法,則返回「成功」或「輸入」,然後再次擊中攔截器以重定向該選定的結果名稱。
我該如何防止兩次調用攔截器?
攔截代碼:
public String intercept(ActionInvocation actionInvocation) throws Exception {
HttpServletRequest request = (HttpServletRequest) actionInvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
HttpSession session = request.getSession();
if (session.getAttribute("member")==null) {
return Action.LOGIN;
} else {
return actionInvocation.invoke();
}
}
struts.xml的作用的看法:
<action name="actionName" class="actionClass" method="init">
<interceptor-ref name="loginStack"/>
<result name="input">show.jsp</result>
</action>
沒有具體操作。攔截器很簡單實現類com.opensymphony.xwork2.interceptor.Interceptor – erhan 2012-02-14 14:27:58
你能澄清你的擔憂嗎?攔截器通常被稱爲兩次,這就是攔截器堆棧的原因。您鑽取堆棧調用該操作,然後返回堆棧。如果你重定向,那麼它會再次被調用......但重定向通常是一些需要避免的事情。整個過程非常快,所以除非發生其他事情,否則不應該這樣。順便說一句,你可以說:actionInvocation.getInvocationContext()。getSession()並刪除第二行。 – Quaternion 2012-02-14 18:08:07
@ Quaternion他們不是「被調用兩次」,他們被調用一次,幷包裝動作執行。我不知道爲什麼要避免重定向;那是什麼爭論? – 2012-02-14 22:53:15