私は JSF 2.0 と既存のフレームワークを使用しています。HttpSessionAttributeListener と ServletRequestAttributeListener を実装することで、オブジェクトがリクエスト/セッションに追加されていることを確認できるリスナー クラスがあります。
@ViewScoped オブジェクトを扱っているので、ViewScoped オブジェクトが追加されたときにアラートを受け取る方法がわかりません。上記の 2 に似た新しいリスナーはありますか?
ビュー スコープは で表されUIViewRoot#getViewMap()
ます。このマップは、実装によってリッスンできる作成イベントと破棄イベント、それぞれ および のみを起動しPostConstructViewMapEvent
ます(これは、例に比べて設定が非常に冗長です。JSF システム イベント リスナー API は、設定に)。このマップは、追加/削除のイベントを発生させません。確かに、Mojarra がこっそりとそれを行っていない場合は、Mojarra のソース コードも調べましたが、残念ながらそうではありません。PreDestroyViewMapEvent
ViewMapListener
HttpSessionBindingListener
あなたの最善の策は、これらの追加/削除イベントをビュー スコープ Bean内@PostConstruct
で手動で起動することです。@PreDestroy
JSF 2.0/2.1 では、@PreDestroy
スコープが設定されたビューの は、セッションの有効期限が切れたときに呼び出されないことに注意してください。これは仕様上の見落としであり、JSF 2.2 で修正されています。