| JavaServer Faces ユーザーズガイド |
目次
![]()
|
| 第3章 JavaServer Facesアプリケーションの開発 |
イベントにはActionEvent、ValueChangeEvent、PhaseEventの3種類があります。
javax.faces.component.ActionSourceインタフェースを実装しているUIコンポーネントで発生するイベントです。
アンカーやボタンが押された場合に発生します。
ActionEventを利用する場合は、以下のどちらかの方法を使用します。
actionListenerアトリビュートにメソッドバインディング式を記述して、managed beanのメソッドを指定します。指定するメソッドの引数はjavax.faces.event.ActionEventクラスで、返却値はvoidである必要があります。指定したメソッドはActionEventが発生すると呼び出されます。javax.faces.event.ActionListenerインタフェースを実装したクラスを作成します。また、UIコンポーネントのタグのコンテントにf:actionListenerタグを記述して、ActionListenerの実装クラスを指定します。ActionEventが発生すると、ActionListenerのprocessActionメソッドが呼び出されます。
actionListenerアトリビュートを利用する場合の例を示します。
[JSPの記述例]
<h:commandButton value="送信" actionListener="#{myBean.pushed}" />
[イベントリスナの記述例]
import javax.faces.event.ActionEvent; public class MyBean { public void pushed(ActionEvent event) { // 処理を記述 } }
javax.faces.component.EditableValueHolderインタフェースを実装しているUIコンポーネントで発生するイベントです。
入力値を持つタグ(フィールドやコンボボックスなど)の値が変更された場合に発生します。
ValueChangeEventを利用する場合は、以下のどちらかの方法を使用します。
valueChangeListenerアトリビュートにメソッドバインディング式を記述して、managed beanのメソッドを指定します。指定するメソッドの引数はjavax.faces.event.ValueChangeEventクラスで、返却値はvoidである必要があります。指定したメソッドはValueChangeEventが発生すると呼び出されます。javax.faces.event.ValueChangeListenerインタフェースを実装したクラスを作成します。また、UIコンポーネントのタグのコンテントにf:valueChangeListenerタグを記述して、ValueChangeListenerの実装クラスを指定します。ValueChangeEventが発生するとValueChangeListenerのprocessValueChangeメソッドが呼び出されます。
なお、ValueChangeEventが発生するのは、画面上で値が変更された瞬間ではなく、ボタン押下によってサーバにリクエストが送信された時点です。
f:valueChangeListenerタグを利用する例を以下に示します。
[JSPの記述例]
<h:inputText value="#{myBean.message}" > <f:valueChangeListener type="mypkg.listeners.InputTextListener" /> </h:inputText>
[イベントリスナの記述例]
package mypkg.listeners; import javax.faces.event.ValueChangeEvent; public class InputTextListener implements javax.faces.event.ValueChangeListener { public void processValueChange(ValueChangeEvent event) { //処理を記述 } }
PhaseEventのリスナを利用すると、JavaServer Facesの各フェーズの前後に割り込んで処理を行うことが可能です。
業務ロジックの共通前処理や後処理に利用することができます。
利用方法は次のとおりです。
[イベントリスナの記述例]
import javax.faces.event.PhaseId; public class MyFacesListener implements javax.faces.event.PhaseListener{ public void beforePhase(javax.faces.event.PhaseEvent event){ // 前処理を記述 } public void afterPhase(javax.faces.event.PhaseEvent event){ // 後処理を記述 } public PhaseId getPhaseId(){ // 割り込むフェーズを指定 return PhaseId.INVOKE_APPLICATION; } }
[JavaServer Faces定義ファイル(faces-config.xml)への登録]
<faces-config> ... <lifecycle> <phase-listener>mypkg.MyFacesListener</phase-listener> </lifecycle> ... </faces-config>
イベントの記述例で、getPhaseIdメソッドの返却値としては次が指定可能です。
javax.faces.event.PhaseId.ANY_PHASE | 全てのフェーズに割り込みます。 |
javax.faces.event.PhaseId.RESTORE_VIEW | Restore Viewフェーズに割り込みます。 |
javax.faces.event.PhaseId.APPLY_REQUEST_VALUES | Apply Request Valuesフェーズに割り込みます。 |
javax.faces.event.PhaseId.PROCESS_VALIDATIONS | Process Validationsフェーズに割り込みます。 |
javax.faces.event.PhaseId.UPDATE_MODEL_VALUES | Update Model Valuesフェーズに割り込みます。 |
javax.faces.event.PhaseId.INVOKE_APPLICATION | Invoke Applicationフェーズに割り込みます。 |
javax.faces.event.PhaseId.RENDER_RESPONSE | Render Responseフェーズに割り込みます。 |
目次
![]()
|