JSF 拡張ポイント - PhaseListener | フェーズ制御
2009/06/24 11:40Update
JSFフレームワークでは、様々な拡張ポイントを提供しています。フェーズの前後にロジックを入れたい場合のPhaseListenerはその拡張ポイントの一つです。
概要
JSFのライフサイクルには次6つのフェーズがあります。
①Restore View Phase:ビューの復元フェーズ
②Apply Request Values Phase:リクエスト値の適用フェーズ
③Process Validation Phase:入力値の検証(バリデーション実行)フェーズ
④Update Model Values Phase:モデル値の更新フェーズ
⑤Invoke Application Phase:アプリケーションの起動フェーズ
⑥Render Response Phase:レスポンスのレンダリング(出力)フェーズ
JSFでは、①~⑥(いずれか)それぞれのフェーズを順番に実行します。
JSF のPhaseListenerは、これらのフェーズの前後に何かの処理をしたい場合に役立ちます。
例えば、
各フェーズが実行される前後にログなどの共通処理を入れたい、
権限チェック、
条件によって次のフェーズを実行したくない
などの場合、PhaseListenerを実装し、リスナーの登録をすることができます。
PhaseListenerの実装手順
1)javax.faces.event.PhaseListenerインタフェースを実装したクラスを定義します。
javax.faces.event.PhaseListener {
//フェーズ前に実行される
public void beforePhase(PhaseEvent phaseEvent);
//フェーズ後に実行される
public void afterPhase(PhaseEvent phaseEvent);
//どのフェーズで実行されるかを指定(フェーズのいずれの一つか全フェーズを指定可能)
public PhaseId getPhaseId();
}
定義例:
package mypackage;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletRequest;
public class ApplicationPhaseListener implements PhaseListener {
/**
* {@inheritDoc}
* @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
*/
public void beforePhase(PhaseEvent phaseEvent) {
//何らかの処理:ログなど
}
/*
* @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
*/
public final void afterPhase(PhaseEvent phaseEvent) {
//何らかの処理:ログなど
}
/**
* @see javax.faces.event.PhaseListener#getPhaseId()
*/
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE; //任意フェーズ
//PhaseId.RESTORE_VIEW
//PhaseId.APPLY_REQUEST_VALUES
//PhaseId.PROCESS_VALIDATIONS
//PhaseId.UPDATE_MODEL_VALUES
//PhaseId.INVOKE_APPLICATION
//PhaseId.RENDER_RESPONSE
//PhaseId.ANY_PHASE
}
}
2)faces-config.xmlにカスタムActionListenerクラスを登録します。
次のように、定義したPhaseListenerクラスをfaces-config.xmlに登録すれば、適応されます。
faces-config.xml
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> <faces-config> <lifecycle> <phase-listener>mypackage.ApplicationPhaseListener</phase-listener> </lifecycle> <faces-config>
.
Sponsored Link
- Relative Articles
- JSFプロジェクト階層構造例 - (2009/06/20 16:39)
- JSFのインストール - 初めてのJSFアプリ作成・実行 - (2009/06/23 16:24)
- ライフサイクルから理解するJSFの仕組み - (2009/06/24 17:43)
- JSF開発におけるweb.xmlの基本的な設定方法 - (2009/03/13 18:13)
- JSF Webページ(JSP)の基本的な書き方 - (2009/03/16 11:58)
- JSF Managed-Beanの定義・設定・使い方 - (2009/03/16 14:48)
- JSF メッセージ処理 概要 - (2009/06/20 20:01)
- JSF Validator入門 - 標準Validator及びその使い方 - (2009/06/22 18:26)
- JSF Converter入門 - 標準Converter及びその使い方 - (2009/06/23 17:17)
- JSF画面遷移 - (2009/06/24 18:08)