ADF af:表编程“selectionListener”在其中一列中停止“valueChangeListener”

时间:2011-11-07 08:03:09

标签: jsf oracle-adf

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”时,它会始终按预期触发。

任何想法自定义处理程序有什么问题?

2 个答案:

答案 0 :(得分:5)

好的,找到了这种奇怪行为的罪魁祸首 在编辑页面标记时,JDeveloper更改了" ChangeEventPolicy" pageDef文件中的迭代器绑定属性来自"默认(无)"到" ppr"。
这导致了这种奇怪的行为 手动恢复到原始值后,一切都按预期工作 " ppr"设置似乎很漂亮,我已经遇到类似问题af:panelTabbed,我不时在标签之间切换时收到一条神秘的错误信息。

答案 1 :(得分:0)

请尝试以下代码:

public void onTableSelect(SelectionEvent selectionEvent) { 

    // --- perform optional pre-processing here --- //

    RichTable _table = (RichTable ) selectionEvent.getSource(); 
    CollectionModel model = (CollectionModel ) _table.getValue(); 
    JUCtrlHierBinding _binding = (JUCtrlHierBinding) model.getWrappedData(); 
    DCIteratorBinding iteratorBinding = _binding.getDCIteratorBinding(); 
    Object _selectedRowData = _table ́.getSelectedRowData(); 
    JUCtrlHierNodeBinding node = (JUCtrlHierNodeBinding) _selectedRowData ; 
    Key rwKey = node.getRowKey();
    iteratorBinding.setCurrentRowWithKey(rwKey.toStringFormat(true));

    // --- perform optional post-processing here --- // 
}