Как внутри Interceptor.intercept () узнать, было ли уже выполнено действие - PullRequest
2 голосов
/ 11 октября 2010

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

FirstInterceptor
  NextInterceptor
    LastInterceptor
      Action
      Result
    LastInterceptor
  NextInterceptor
FirstInterceptor

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

Страница «Большая картина» говорит несколько смущающе"до" и "после" "предложения", которые вызываются, но я не знаю, что с этим делать:

[...]

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

[...]

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

[...]

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

1 Ответ

2 голосов
/ 11 октября 2010

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

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;
    }

}

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

...