JavaServer Faces ユーザーズガイド
目次 前ページ次ページ

第3章 JavaServer Facesアプリケーションの開発

3.3 イベントリスナの作成

イベントにはActionEventValueChangeEventPhaseEventの3種類があります。

■ActionEvent

javax.faces.component.ActionSourceインタフェースを実装しているUIコンポーネントで発生するイベントです。 アンカーやボタンが押された場合に発生します。 ActionEventを利用する場合は、以下のどちらかの方法を使用します。

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を利用する場合は、以下のどちらかの方法を使用します。

なお、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_VIEWRestore Viewフェーズに割り込みます。
javax.faces.event.PhaseId.APPLY_REQUEST_VALUESApply Request Valuesフェーズに割り込みます。
javax.faces.event.PhaseId.PROCESS_VALIDATIONSProcess Validationsフェーズに割り込みます。
javax.faces.event.PhaseId.UPDATE_MODEL_VALUESUpdate Model Valuesフェーズに割り込みます。
javax.faces.event.PhaseId.INVOKE_APPLICATIONInvoke Applicationフェーズに割り込みます。
javax.faces.event.PhaseId.RENDER_RESPONSERender Responseフェーズに割り込みます。

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2005