af:table コンポーネントの「selectionListener」属性のデフォルト値は、通常、次のようになります。
selectionListener="#{bindings.IterBinding.collectionModel.makeCurrent}"
ただし、特別な選択処理が必要な場合は、通常はバッキング Bean で選択イベントのカスタム ハンドラーを指定できます。このカスタム ハンドラーの最初の手順として、行を現在の行にするための既定の機能がプログラムによって呼び出されます。これは、次のコード スニペットのようになります。
public void testSelectionListener(SelectionEvent selectionEvent) {
JSFUtils.resolveMethodExpression("#{bindings.IterBinding.collectionModel.makeCurrent}", null,
new Class[]{SelectionEvent.class}, new Object[]{selectionEvent});
}
これは、標準の選択ハンドラーとまったく同じように動作するはずですよね?
しかし、そうではありません。
テーブル列の 1 つでチェック ボックスをクリックして選択の変更をトリガーする場合、この af:selectBooleanCheckbox の「valueChangeListener」はこの機会に起動しません。2 回目にクリックすると発火します。デフォルトの「selectionListener」を使用すると、常に期待どおりに起動します。
カスタム ハンドラーの何が問題なのですか?