シュンツのつまづき日記スマートフォン用の表示で見るシュンツのつまづき日記2012-09-05フェーズリスナを使ったセッションチェックJSF2.0今回はフェーズリスナを使ったセッションチェックについてです。3.1.2.2【概要】フェーズリスナはJSFで特定のフェイズをインターセプトするためのリスナです。今回のサンプルはレスポンスをレンダリングする前にセッションの有無をチェックします。セッションがない場合はログイン画面に遷移するサンプルです。画面のユーザIDをセッションに設定しています。HttpSessionのオブジェクトはjavax.faces.context.ExternalContext#getSessionメソッドを使用して取得します。ExternalContextはFacesContext#getExternalContextメソッドを使用して取得します。セッションをクリアするにはExternalContext#ivalidateSessionメソッドを使います。[ページ]まずはログイン画面です。ログイン画面のファイル名は「login.xhtml」です。入力項目としてはユーザIDのみです。遷移先の画面はログアウトボタンのみがあります。ファイル名は「menu.xhtml」です。[リスナ]リスナのサンプルコートは↓になります。}}フェーズリスナを使用するにはjavax.faces.event.PhaseListenerクラスを継承します。PhaseListenerクラスでは下記の三つの抽象メソッドが定義されています。getPhaseIdメソッドbeforePhaseメソッドafterPhaseメソッドgetPhaseIdメソッドはインターセプトするタイミングを指定します。列挙型であるjavax.faces.event.PhaseIdクラスのオブジェクトを返します。beforePhase/afterPhaseメソッドはインターセプトする対象となったフェーズの直前/直後に実行されます。サンプルではbeforePhaseメソッドを使用してセッションのチェックを行います。ログイン画面からの遷移の場合はセッションのチェックを行わないようにしています。遷移元を取得するにはjavax.faces.component.UIViewRoot#getViewIdメソッドを使用します。UIViewRootを取得するにはFacesContext#getViewRootメソッドを使用します。UIViewRoot#getViewIdメソッドを実行するとコンテキストルート以降のパスが取得できます。取得結果はスラッシュで始まります。フェーズリスナの処理終了を知らせるためにはFacesContex#responseCompleteメソッドを呼び出します。[faces-config.xml]作成したリスナを有効にするにはfaces-config.xmlに設定を追加します。</lifecycle></faces-config>lifecycleタグの子要素であるphase-listenerタグで指定します。phase-listenerタグにはリスナのクラス名を指定します。【最後に】やや無理矢理な感じがしますが、フェーズリスナを使えばセッションのチェックができます。今回はロックについてです。月別アーカイブはてなブログをはじめよう!gloryofさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。