0

私はjsf 2.0を使用しています

PreRenderView について質問があります。

私のBeanには次のようなメソッドがあります

public void init() throws Exception
    {

        FacesContext.getCurrentInstance().getExternalContext().redirect("/To My Page");
        if(!FacesContext.getCurrentInstance().isPostback())
        {
            System.out.println("Kshitij");
        }
    }

このメソッドが実行されると、サーブラー ログに「Kshitij」も出力されます。

次に、ページにリダイレクトします。

なぜ?最初にページにリダイレクトする必要があると思います。

4

1 に答える 1

1

実際のリダイレクトが最初に実行されるのはなぜだと思いますか? サーバーがリクエスト/レスポンスの制御を継続できるようにするには、まずメソッドの実行を終了する必要があります。コードの実行を途中で一時停止してから、新しいリクエストとスレッドのまったく同じ場所でコードの実行を続行することは不可能です。

呼び出しは、redirect()基本的にLocation応答ヘッダーを設定します。メソッドが返された場合にのみ、サーバーは応答を送信し、ブラウザはその場所で新しい要求を送信します。

リダイレクトする必要があるときに印刷をスキップする場合は、return ステートメントまたは if/else を追加します。

if (youNeedToRedirect) {
    FacesContext.getCurrentInstance().getExternalContext().redirect("/To My Page");
}
else {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        System.out.println("Kshitij");
    }
}

これはすべて、JSF やpreRenderView. それはすべて基本的な Java と HTTP です。

関連している:

于 2012-05-11T11:34:52.510 に答える