ADF af: таблица программных «selectionListener» останавливает «valueChangeListener» в одном из столбцов для запуска - PullRequest
2 голосов
/ 07 ноября 2011

Значение по умолчанию атрибута «selectionListener» для компонента af: table обычно выглядит следующим образом: selectionListener="#{bindings.IterBinding.collectionModel.makeCurrent}"

Но если требуется некоторая специальная обработка выбора, можно указать собственный обработчик для события выбора, обычно в компоненте поддержки. В качестве первого шага в этом пользовательском обработчике программная функциональность по умолчанию вызывается для текущей строки. Это может выглядеть как следующий фрагмент кода:

public void testSelectionListener(SelectionEvent selectionEvent) {        
    JSFUtils.resolveMethodExpression("#{bindings.IterBinding.collectionModel.makeCurrent}", null, 
                                   new Class[]{SelectionEvent.class}, new Object[]{selectionEvent});        
}

Это должно вести себя так же, как стандартный обработчик выбора, верно?
Но это не так.
При инициировании изменения выбора путем установки флажка в одном из столбцов таблицы «valueChangeListener» для этого af: selectBooleanCheckbox не срабатывает в этом случае. Он срабатывает при нажатии во второй раз. При использовании «selectionListener» по умолчанию он срабатывает всегда, как и ожидалось.

Есть идеи, что не так с пользовательским обработчиком?

Ответы [ 2 ]

5 голосов
/ 09 января 2012

Хорошо, виновник такого странного поведения найден.
При редактировании разметки страницы JDeveloper изменил значение атрибута «ChangeEventPolicy» в привязке итератора в файле pageDef с «default (none)» на «ppr».
Это приводит к этому странному поведению.
После ручного возврата к исходному значению все работает как положено.
Параметр «ppr» выглядит довольно глючно, у меня уже была похожая проблема с af: panelTabbed, где я получал таинственное сообщение об ошибке при переходе между вкладками время от времени.

0 голосов
/ 09 августа 2012

Пожалуйста, попробуйте ниже код:

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 --- // 
}
...