このようなことは可能ですか: ユーザー セッションが開始されると、データベースから特定の不可欠な属性を読み取ります。ユーザーがこのセッションで特定のアクティビティを実行すると、その変数 (セッションに格納されている) が更新され、セッションが終了すると、最終的にその値が DB に格納されます。
私の質問は、ユーザー セッションが終了した場合に JSF フレームワークを使用して識別する方法です。その後、値を DB に保存する必要があります。
このようなことは可能ですか: ユーザー セッションが開始されると、データベースから特定の不可欠な属性を読み取ります。ユーザーがこのセッションで特定のアクティビティを実行すると、その変数 (セッションに格納されている) が更新され、セッションが終了すると、最終的にその値が DB に格納されます。
私の質問は、ユーザー セッションが終了した場合に JSF フレームワークを使用して識別する方法です。その後、値を DB に保存する必要があります。
とは別に、これにHttpSessionListener
はセッション スコープのマネージド Bean を使用できます。@PostConstruct
(または単に Bean のコンストラクター) と注釈を使用@PreDestroy
して、セッションの作成と破棄をフックします。
@ManagedBean
@SessionScoped
public class SessionManager {
@PostConstruct
public void sessionInitialized() {
// ...
}
@PreDestroy
public void sessionDestroyed() {
// ...
}
}
唯一の要件は、この Bean が JSF ページで参照されていること、または@ManagedProperty
要求スコープの Bean として参照されていることです。そうしないと作成されません。しかし、あなたのケースでは、@PreDestroy
メソッドを追加するだけで十分なはずです。
私の質問は、ユーザー セッションが終了した場合に JSF フレームワークを使用して識別する方法です。その後、値を DB に保存する必要があります。
JSF フレームワークには、セッションの別個の概念はありません。サーブレット仕様の基礎となるセッション管理機能を使用します。
セッションの作成イベントと破棄イベントをキャプチャするためのフックを提供するHttpSessionListenerを作成する必要があります。このイベントでは、値を読み取って DB に戻すことができます。
HttpSessionListener
、またはその保存に依存性注入が必要な場合は、を使用できます@PostConstruct & @PreDestroy
。invalidate()
ユーザーがブラウザーを閉じたときではなく、呼び出し時またはセッション タイムアウト後にセッションが破棄されることに注意してください。とにかくセッションスコープを使用するのはなぜですか。会話スコープの方が適しているかもしれません。