6

このようなことは可能ですか: ユーザー セッションが開始されると、データベースから特定の不可欠な属性を読み取ります。ユーザーがこのセッションで特定のアクティビティを実行すると、その変数 (セッションに格納されている) が更新され、セッションが終了すると、最終的にその値が DB に格納されます。

私の質問は、ユーザー セッションが終了した場合に JSF フレームワークを使用して識別する方法です。その後、値を DB に保存する必要があります。

4

3 に答える 3

10

とは別に、これにHttpSessionListenerはセッション スコープのマネージド Bean を使用できます。@PostConstruct(または単に Bean のコンストラクター) と注釈を使用@PreDestroyして、セッションの作成と破棄をフックします。

@ManagedBean
@SessionScoped
public class SessionManager {

    @PostConstruct
    public void sessionInitialized() {
        // ...
    }

    @PreDestroy
    public void sessionDestroyed() {
        // ...
    }

}

唯一の要件は、この Bean が JSF ページで参照されていること、または@ManagedProperty要求スコープの Bean として参照されていることです。そうしないと作成されません。しかし、あなたのケースでは、@PreDestroyメソッドを追加するだけで十分なはずです。

于 2011-06-05T11:14:43.163 に答える
5

私の質問は、ユーザー セッションが終了した場合に JSF フレームワークを使用して識別する方法です。その後、値を DB に保存する必要があります。

JSF フレームワークには、セッションの別個の概念はありません。サーブレット仕様の基礎となるセッション管理機能を使用します。

セッションの作成イベントと破棄イベントをキャプチャするためのフックを提供するHttpSessionListenerを作成する必要があります。このイベントでは、値を読み取って DB に戻すことができます。

于 2011-06-05T06:18:12.483 に答える
2

HttpSessionListener、またはその保存に依存性注入が必要な場合は、を使用できます@PostConstruct & @PreDestroyinvalidate()ユーザーがブラウザーを閉じたときではなく、呼び出し時またはセッション タイムアウト後にセッションが破棄されることに注意してください。とにかくセッションスコープを使用するのはなぜですか。会話スコープの方が適しているかもしれません。

于 2011-06-05T12:33:07.243 に答える