2

私は JSF 2.0 と既存のフレームワークを使用しています。HttpSessionAttributeListener と ServletRequestAttributeListener を実装することで、オブジェクトがリクエスト/セッションに追加されていることを確認できるリスナー クラスがあります。

@ViewScoped オブジェクトを扱っているので、ViewScoped オブジェクトが追加されたときにアラートを受け取る方法がわかりません。上記の 2 に似た新しいリスナーはありますか?

4

1 に答える 1

1

ビュー スコープは で表されUIViewRoot#getViewMap()ます。このマップは、実装によってリッスンできる作成イベントと破棄イベント、それぞれ および のみを起動しPostConstructViewMapEventます(これは、例に比べて設定が非常に冗長です。JSF システム イベント リスナー API は、設定に)。このマップは、追加/削除のイベントを発生させません。確かに、Mojarra がこっそりとそれを行っていない場合は、Mojarra のソース コードも調べましたが、残念ながらそうではありません。PreDestroyViewMapEventViewMapListenerHttpSessionBindingListener

あなたの最善の策は、これらの追加/削除イベントをビュー スコープ Bean内@PostConstructで手動で起動することです。@PreDestroyJSF 2.0/2.1 では、@PreDestroyスコープが設定されたビューの は、セッションの有効期限が切れたときに呼び出されないことに注意してください。これは仕様上の見落としであり、JSF 2.2 で修正されています。

于 2013-08-21T12:16:26.857 に答える