3

JSF2.0 Mojarra 2.0.2 を使用しています。

ユーザーをログアウトし、ログアウト メッセージをフラッシュに入れ、ログイン ページ (フラッシュを出力する div がある) に転送するメソッドがあります。しかし、なんらかの理由で、navigationHandlers の handleNavigation メソッドを使用すると、フラッシュが表示されません。ログインしていない場合にユーザーをログインページに転送する同様の方法があります。

h:link を介してナビゲーションを処理し、logout メソッドを直接呼び出すだけでは通常どおりフラッシュが表示されますが、handleNavigation() メソッドを使用すると、何らかの理由でフラッシュがクリアされます。

問題のコードは次のとおりです。

public void performLogout()
{
    getFacesContext().getExternalContext().invalidateSession();
    setCurrentUser(null);
    getFlash().put("notice", "Successfully logged out.");
    super.getFacesContext().getApplication().getNavigationHandler()
            .handleNavigation(getFacesContext(), null, "login");
}

このようにナビゲートするときにフラッシュを保持できる方法はありますか?

ありがとう。

編集: この問題は、xhtml ページが異なるディレクトリにある場合にリダイレクト中にフラッシュが保持されないという別の問題に関連していると思います: http://java.net/jira/browse/JAVASERVERFACES-1635

4

1 に答える 1

2

あなたが正しい。

JSF 2 フラッシュ スコープは現在非常にバグが多く、仕様に基づくと、おそらくほとんど使用できないままです: http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/index.html

次のように動作するフラッシュ スコープが必要な場合は、CDI と Seam Faces のフラッシュ スコープの使用を検討してください - http://docs.jboss.org/seam/3/faces/reference/snapshot/en-US/html_single /#フラッシュスコープ

「フラッシュ スコープは、オブジェクトがスコープに配置された瞬間から、応答のレンダリングが完了する瞬間までアクティブである必要があります。」

――リンカーン

于 2010-08-18T18:27:46.137 に答える