2012-05-17 107 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