2

インターセプターを使用してStrutsベースのアプリケーションにいくつかのものを実装していますが、それらのライフサイクルがどのように機能するかについて混乱しています。Strutsのドキュメント(「インターセプター」「ライティングインターセプター」「全体像」)によると、次のように機能するはずです。

FirstInterceptor
  NextInterceptor
    LastInterceptor
      アクション
      結果
    LastInterceptor
  NextInterceptor
FirstInterceptor

これは理にかなっていますが、アクションの前に実行されているインターセプター呼び出しと、結果がレンダリングされた後に実行されているインターセプター呼び出しを区別する方法に出くわしています(PreResultListenerここではsをスキップしています)。デバッガーを起動すると、2回の呼び出しがあり、渡さintercept()れているものであまり明白なものを見つけることができません。ActionInvocation 更新:この部分は私の側で大きな混乱でした、そして私がそれを手に入れたら私は以下の私の質問に答えることができました)

全体像」のページでは、「前」と「後」の「節」と呼ばれるものについてやや紛らわしい話をしていますが、どうすればよいかわかりません。

[...]

これには、アクション自体を呼び出す前にインターセプター(before句)を呼び出すことが含まれます。

[...]

インターセプターが再度実行されます(逆の順序で、after句を呼び出します)。

[...]

更新:これらの2つの文はまだ悪いですが)

4

1 に答える 1

2

インターセプターへの呼び出しは2つありません。

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

}

(デバッガーで目撃した「インターセプトへの2回の呼び出し」は、あまり目立たないリダイレクトの結果であり、気付かなかったことに注意してください。これにより、多くの混乱が生じました。)

于 2010-10-11T16:33:55.703 に答える