2012-05-17 2 views
1

Я добавил перехватчик Struts2, там я хочу изменить вызывающее действие, если какой-то логический триггер. В настоящее время я могу изменить файл JSP перенаправления после вызова действия. Но мне нужно изменить вызывающее действие, прежде чем вызывать действие. Есть ли способ вызвать разные действия?Действия по перехвату Struts2

Thank you.

+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

Для действия, основанного на аннотациях, мы должны определить «SpecificAction» в разделе результатов UserAction. Есть ли способ избежать этого? – Chandana

+1

Либо вы определяете его свой actionClass, либо определяете в своем struts.xml, чтобы он вызывался, не определяя действие, как вы можете его назвать? – mprabhat