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});
}
这应该与标准选择处理程序完全一样,对吧?
但事实并非如此。
通过单击表格列之一中的复选框触发选择更改时,此 af:selectBooleanCheckbox 的“valueChangeListener”不会在这种情况下触发。第二次点击时触发。当使用默认的“selectionListener”时,它总是按预期触发。
任何想法自定义处理程序有什么问题?