JavaServer Faces ユーザーズガイド
|
目次
|
3.3 イベントリスナの作成
イベントにはActionEvent
、ValueChangeEvent
、PhaseEvent
の3種類があります。
■ActionEvent
javax.faces.component.ActionSource
インタフェースを実装しているUIコンポーネントで発生するイベントです。
アンカーやボタンが押された場合に発生します。
ActionEvent
を利用する場合は、以下のどちらかの方法を使用します。
- UIコンポーネントのタグの
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) {
// 処理を記述
}
}
|
■ValueChangeEvent
javax.faces.component.EditableValueHolder
インタフェースを実装しているUIコンポーネントで発生するイベントです。
入力値を持つタグ(フィールドやコンボボックスなど)の値が変更された場合に発生します。
ValueChangeEvent
を利用する場合は、以下のどちらかの方法を使用します。
- UIコンポーネントのタグの
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
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フェーズに割り込みます。 |
All Rights Reserved, Copyright © 富士通株式会社 2005