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});
}
Run Code Online (Sandbox Code Playgroud)
这应该与标准选择处理程序完全相同,对吧?
但事实并非如此.
通过单击其中一个表列中的复选框触发选择更改时,此af:selectBooleanCheckbox的"valueChangeListener"不会在此时触发.它在第二次点击时会触发.使用默认的"selectionListener"时,它会始终按预期触发.
任何想法自定义处理程序有什么问题?