2012-05-17 142 views
1

我添加了Struts2攔截器,在那裏我想更改調用動作,如果某些邏輯觸發。目前,我可以在調用操作後更改重定向JSP文件。但是我需要在調用動作之前更改調用動作。有什麼辦法可以調用不同的動作嗎?Struts2攔截器更改操作

謝謝。

+1

您可以返回任何想要的結果,包括映射到某個操作的全局結果。改變行動調用本身,不太確定 - 我也不相信這是必要的。 –

+0

根據我的理解,您正在嘗試確定在您的自定義攔截器中要調用哪個動作如果是這樣您不能這樣做。你的實際需求是什麼? –

+0

您的問題還不夠清楚,但您仍然可以按照Dave的建議從攔截器返回結果字符串,並且可以使用該結果字符串來控制應用程序的流程 –

回答

2

你的攔截方法,按您的意見將是這個樣子:

public String intercept(ActionInvocation actionInvocation) throws Exception { 

     final ActionContext actionContext = ActionContext.getContext(); 
     final HttpServletRequest httpServletRequest = (HttpServletRequest) actionContext.get(HTTP_REQUEST); 
     HttpSession httpSession = httpServletRequest.getSession(false); 

     UserObject userObject = session.getAttribute("User"); //Check for user information, this is just a dummy 
     if(isSpecificUser(userObject)){  
      return "SpecificAction"; 
     } 
     return actionInvocation.invoke(); 
    } 

SpecificAction應該出現在您的配置文件。

+0

對於基於註釋的操作,我們必須在UserAction的結果部分中定義'SpecificAction'。有什麼辦法可以避免它? – Chandana

+1

您可以將其定義爲您的actionClass,或者您在struts.xml中定義它,以便在不定義動作的情況下調用該動作。 – mprabhat