Внутри Interceptor.intercept(), как я узнаю, что действие уже выполнено?

Я реализую некоторые вещи в своем приложении на основе Struts, используя перехватчики, и я не понимаю, как работает их жизненный цикл. Согласно документам Struts (Interceptors, Запись перехватчиков и Общая картина), это должно работать примерно так:

FirstInterceptor
  NextInterceptor
    LastInterceptor
      Action
      Result
    LastInterceptor
  NextInterceptor
FirstInterceptor

что имеет смысл, но я спотыкаюсь о том, как отличить вызов перехватчика, выполняемый до действия, от вызова, выполняемого после рендеринга результата (здесь я пропускаю PreResultListener). Если я запускаю отладчик, я получаю два вызова intercept() и не могу найти ничего слишком очевидного в передаваемом мне ActionInvocation. (Обновление: Эта часть вызвала у меня большую путаницу, и я смог ответить на свой вопрос ниже, как только получил его)

На странице Общая картина несколько сбивчиво рассказывается о до и после пункт, который называется, но я не знаю, что с этим делать:

[...]

Это включает в себя вызов любых перехватчиков (предложение before) перед вызовом самого действия.

[...]

Перехватчики выполняются снова (в обратном порядке, вызывая предложение after).

[...]

(Обновление: эти два предложения по-прежнему плохие)


person Hanno Fietz    schedule 11.10.2010    source источник


Ответы (1)


Нет двух вызовов перехватчику:

public class MyInterceptor implements Interceptor {

    public String intercept(ActionInvocation invocation) {
        /*
        This is before Action.execute(),
        and before all interceptors down the stack
        */

        String code = invocation.invoke();

        /*
        This is after Action.execute(),
        the result rendering and all
        interceptors down the stack,
        but before the interceptors
        higher up in the stack.
        */

        return code;
    }

}

(Обратите внимание, что "два вызова перехвата", которые я наблюдал в отладчике, были результатом менее очевидного перенаправления, которое я не заметил. Это меня сильно смутило.)

person Hanno Fietz    schedule 11.10.2010