私はクッキーを使用して、重要でないデータをセッション間で共有しています。私はいくつかのlastUsedEntity(文字列リテラル)を現在のセッションからユーザログアウトイベントで保存して、そのエンティティを次のログインセッションで読み込み/使用できるようにします。そのエンティティは私のアプリケーションのセッションBeanに属します。次のセッションで古いセッションから保存されたデータを使用する方法は?
このエンティティを抽出し、セッションBeanの@PreDestroy
メソッドに格納することにしました。このメソッドは、アプリケーションのセッションタイムアウト時に正常に実行されました。しかし、@PreDestroy
メソッドでFacesContext.getCurrentInstance()
がヌルであったため、Cookieの保存に失敗しました。これはJSFライフサイクルのリクエスト - 応答サイクルが完了したためです。私はFacesContext.getCurrentInstance()
を@PostContruct
のセッションBeanのメソッドにキャッシュしようとしましたが、フェースコンテキストのキャッシュされたインスタンスにアクセスできましたが、別の問題に直面しましたjava.lang.IllegalStateException at com.sun.faces.context.FacesContextImpl.assertNotReleased FacesContextをセッションスコープのクラスのインスタンス変数として使用したためです。このシナリオでさらに使用するために私の古いセッションデータを保持するために、私がここで何か頭を上げるか、または他のより良いアイデアを得ることができれば幸いです。
以前は、各ページの読み込み(またはリクエスト)でCookieを設定すると言っていました。私は複数ページのアプリケーションで作業しています。独自のIDを持つ各ページ。ログアウト時にページがログインページにリダイレクトされます。私はそれぞれの 'ViewScoped'ページに上陸すると、' PostConstruct'メソッドで 'lastOpenedId'という名前のキーでクッキーを設定しています。このIDは、セッションスコープのサービスBeanに由来します。しかし、私の実際の要件は 'lastExpiredId'を格納する代わりにセッションのタイムアウトのためにログアウトしたページのIDを追跡する必要があるためです。 – user2918640
DBに格納します。 – BalusC
これは、Webフレームワークレベルで実行できるものを考え出すことができない限り、私が最後の手段として考えてきたことです。 – user2918640