アクション・イベントおよびリスナーについて

アクション・イベントは、ActionSourceを実装するコマンド・コンポーネントがアクティブになると発生します。たとえば、ユーザーがボタンまたはリンクをクリックすると、コンポーネントが含まれているフォームが発行され、続いてアクション・イベントが起動されます。

アクション・イベントは、ユーザー・インタフェースにのみ影響を与える場合(例: ロケールを変更し、異なるフィールド・プロンプトを表示するリンク)、またはバックエンドでのロジック処理に影響を与える場合(例: いくつかのフィールドに値を入力した後で新規注文を追加するボタン)があります。

アクション・イベントは、javax.faces.event.FacesEventクラスを拡張するjavax.faces.event.ActionEventクラスのインスタンスです。ActionEventインスタンスでは、イベントを生成したコンポーネントに関する情報を格納し、後でブロードキャストされるようにイベントをキューに入れます。

アクション・リスナーは、コマンド・コンポーネントによってアクション・イベントが起動されたときに通知を受けるクラスです。このリスナーによって、javax.faces.event.ActionListenerインタフェースが実装されます。アクション・リスナーには、アクション・イベントを処理するアクション・リスナー・メソッドが含まれています。

デフォルトでは、アクション・リスナーは、アプリケーションの起動フェーズの最後に通知を受けます。イベントは、コマンド・コンポーネントによって登録済のアクション・リスナーにブロードキャストされ、イベント・オブジェクトは、リスナーが参照するメソッドに渡されます。イベントは、必要に応じて、リクエスト値の適用フェーズの最後に配信されるように設定できます。この方法の詳細は、「イベントおよびimmediate属性について」を参照してください。

コマンド・コンポーネントのアクション・イベントを処理するには、次の処理を実行する必要があります。

入力コンポーネントや値の変更イベントとは異なり、エンクロージング・フォームは、コマンド・コンポーネントがアクティブになると発行されます。このため、フォームの発行に、コマンド・コンポーネントのonchange属性を使用する必要はありません。

ActionListenerインタフェースの実装

ActionListenerインタフェースはjavax.faces.event.FacesListenerを拡張します。リスナーの実装では、単一の引数としてActionEventインスタンスを使用し、アクション・イベントを処理するprocessAction(ActionEvent)メソッドを定義する必要があります。

ActionListenerインタフェースの詳細は、javax.faces.event.ActionListenerに関するJavadocを参照するか、java.sun.comのWebページhttp://java.sun.com/j2ee/javaserverfaces/にアクセスしてください。

Beanにおけるアクション・リスナー・メソッドの作成

ActionListenerインタフェースのprocessAction(ActionEvent)メソッドと同様に、アクション・リスナー・メソッドは、単一のActionEventを使用し、戻り型がvoidのpublicメソッドであることが必要です。

アクション・リスナー・メソッドでは通常、ナビゲーション処理は処理されないことに注意してください。ナビゲーションを処理するアクション・メソッドの使用方法は、「ナビゲーションに影響を与えるアクション・メソッドおよび結果について」を参照してください。

リスナーの起動順序

デフォルトでは、JSFでアクション・イベントに対するリスナーが起動する順序は、次のとおりです。


バッキングBean、メソッド・バインディングおよび自動コンポーネント・バインディングについて
コマンド・コンポーネントへの新規アクション・メソッドの設定
コマンド・コンポーネントへの既存アクション・メソッドの設定
コマンド・コンポーネントへのアクション結果文字列の設定
コマンド・コンポーネントへのアクション・リスナー・インスタンスの登録
コマンド・コンポーネントへの既存アクション・リスナー・メソッドの登録
アクション・リスナー・メソッドの新規作成およびコマンド・コンポーネントへの登録