データを保存するときに新しいアイテムを追加するページがあり、「データが正常に保存されました」というメッセージを表示する別のページに移動します。メッセージがリクエストスコープに属していることを読んだので、フラッシュスコープを使用しています。
context.addMessage("calendarGameForm:growl", new FacesMessage("Data was saved successful");
context.getExternalContext().getFlash().setKeepMessages(true);
return outcome;
これは、最初のページの保存ボタンによって呼び出されますaddSeason.xhtml
。
<p:commandButton id="save" action="#{controller.add}"
value="#{msg.save}" ajax="true"
type="submit" update="@form"/>
ナビゲーション ルールは次のように定義されます。
<navigation-rule>
<from-view-id>/competitions/addSeason.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/competitions/calendarGame.xhtml</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>fail</from-outcome>
<to-view-id>/competitions/calendarGame.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
しかし、ターゲット ページcalendarGame.xhtml
でメッセージが表示されません。
<p:growl id="growl" globalOnly="true" sticky="true"/>
サーバーログにもこの警告が表示されます。
WARNING [javax.enterprise.resource.webcontainer.jsf.flash] (ajp--127.0.0.1-8009-1) JSF1095: フラッシュの送信 Cookie を設定しようとした時点で、応答は既にコミットされていました。フラッシュに保存された値は、次のリクエストでは使用できません。
どうすれば問題を解決できますか?