0

からナビゲーションケースを削除し、faces-config.xml暗黙のナビゲーションに切り替えました。

FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Successful", "Datacenter " + ndc.componentStatsId + " is created!"));

if (result == 1)
{
    return "DatacentersList.xhtml?faces-redirect=true";
}

if (result == 2)
{
    return "NewDatacenter.xhtml?faces-redirect=true";
}
return null;

ナビゲーションは非常にうまく機能していますが、顔のメッセージが表示されなくなっていることがわかりました。これはどのように発生し、どうすれば修正できますか?

4

1 に答える 1

2

Faces メッセージはリクエスト スコープです。それらは現在のリクエストに追加されます。リダイレクトは、指定された URL で新しいGET リクエストを作成するようブラウザに指示します。その新しいリクエストは、現在のリクエストと同じではありません。その新しいリクエストには、それらの顔のメッセージがまったく含まれていません。

次の 2 つのオプションがあります。

  1. リダイレクトしないでください。元のナビゲーション ケースでもリダイレクトしていなかった可能性があります。

    if (result == 1) {
        return "DatacentersList.xhtml";
    }
    
    if (result == 2) {
        return "NewDatacenter.xhtml";
    }
    
  2. メッセージをフラッシュ スコープに保持します。フラッシュ スコープは、単一のリダイレクトがある限り有効に存続します。

    context.getExternalContext().getFlash().setKeepMessages(true);
    

    Mojarra の古いバージョンには、これに関連する特有のバグがいくつかあることに注意してください。たとえば、別のフォルダにリダイレクトすると、依然として失敗します。これらのバグに悩まされないように、少なくとも Mojarra バージョン 2.1.14 を使用していることを確認してください (現在は既に 2.1.20 です)。

于 2013-03-19T19:33:08.803 に答える