デフォルトでは、値の変更イベントは、コンポーネントの値が正常に検証された後の、検証処理フェーズの最後に起動されます。
必須入力フィールドと、値の変更リスナーを使用してロケールを変更するselectOneMenu
コンポーネントを含んだページがあるとします。ユーザーが入力フィールドに値を入力せずにメニューから選択すると、selectOneMenu
の値が変更された場合は、フォーム発行時に検証エラーが発生します。
selectOneMenu
コンポーネントで、リクエスト値の適用フェーズの最後に値の変更イベントを起動するには、コンポーネントのimmediate
属性をtrue
に設定します。後のライフサイクル内で他の検証が実行されないようにするには、値の変更リスナー・メソッドの最後に、FacesContext
のrenderResponse
メソッドをコールする必要があります。この結果、JSFは、まだ実行されていないすべてのフェーズをスキップし、レンダー・レスポンス・フェーズに直接ジャンプします。
...
public void yourListener(ValueChangeEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
if ...
else
...
context.renderResponse();
}
...
同様に、アクション・イベントをアプリケーションの起動の最後ではなく、リクエスト値の適用フェーズの最後に起動する場合は、コマンド・コンポーネントのimmediate
属性をtrue
に設定できます。たとえば、ページに必須入力フィールドと取消ボタンがあり、ユーザーが必須フィールドに値を入力せずにページから移動できるようにする場合に設定します。
しかし、値の変更イベントとは異なり、アクション・リスナーでFacesContext.renderResponse()
をコールする必要はありません。これは、レンダー・レスポンス・フェーズは、すべてのアクション・メソッドの起動後に自動的に実行されるためです。
イベントおよびJSFライフサイクルについて
イベント処理について
JSFでのイベントおよびイベント・リスナーの使用
Copyright © 1997, 2007, Oracle. All rights reserved.