4

私はこれを行うための優雅なJSFの方法を探しており、これを行うための一般的に受け入れられている慣行があるかどうか疑問に思っていました。

あるページから別のページに移動するとき、最後のページから送信されたh:messageコンポーネント(実際にはp:messageですが、同じものである必要があります)でFacesMessageを新しいページに表示したいと思います。

したがって、たとえば、ユーザーが[ドキュメントの作成]ボタンをクリックすると、成功すると新しいページに移動し、新しいページに成功メッセージが表示されます。すべてのデータベース変更操作がそのように動作するようにしたい。

FacesContextはナビゲーション上のすべてのメッセージをクリアするように見えるので、私の最も近い解決策は次のようになります。

  1. FacesMessageオブジェクトをセッションBeanに格納します。
  2. FacesContext.getCurrentInstance()。addMessage(..)を呼び出すメッセージBeanにメソッドcheckMessageを作成し、メッセージBeanからメッセージを削除します。
  3. 宛先ページのcheckMessageへのEL参照を配置します。
  4. 宛先ページにp:messageを配置し ます

これは少し強制されているようです-これを行うためのより良い方法はありますか?

4

2 に答える 2

13

Faces メッセージは実際にリクエスト スコープです。

新しい JSF 2.0 Flash スコープを利用するだけです: Flash#setKeepMessages():

context.addMessage(clientId, message);
context.getExternalContext().getFlash().setKeepMessages(true);
// ...

これには、現在の Mojarra 2.1.13 リリースでの注意事項が 1 つだけあります。リダイレクトは、URL の同じ「フォルダー」で実行する必要があります。これは、まもなくリリースされる 2.1.14 で修正されます。issue 2136も参照してください。

于 2012-09-18T21:31:47.223 に答える
1

http://ocpsoft.org/java/persist-and-pass-facesmessages-over-page-redirects/

http://balusc.blogspot.se/2007/03/post-redirect-get-pattern.html

多分それらの1つが役立つでしょうか?

于 2012-09-18T18:48:50.450 に答える