Проблема с выбором строки в extendedDataTable - PullRequest
0 голосов
/ 13 июня 2019

У меня проблема с extendedDataTable в richfaces. Я пытаюсь выбрать одну строку в extendedDataTable, и выбор работает. Это код, который я использую.

...
    <rich:extendedDataTable id="dt2_documenti_a4" styleClass="tableLeft"
                rowClasses="row1,row2" rows="10" value="#{formCarriBombolaiDettaglioInterventoBean.elencoErogazioni}" var="doc" 
                selectionMode="single">
                    <a4j:ajax event="selectionchange" execute="@this"/>
                    <a4j:ajax listener="#{carriBombolaiPMIBean.updateCheckboxErogazioneEvPub(doc)}" event="selectionchange" 
                            render="dt2_documenti_a4, calcoli_preventivo_ev_pub, mod_preventivo, panel_preventivi"/>
    ...

Проблема в том, что переменная doc при передаче методу carriBombolaiPMIBean.updateCheckboxErogazioneEvPub(doc) равна нулю. Кто-то знает, в чем может быть проблема?

1 Ответ

1 голос
/ 13 июня 2019

Ваша переменная doc имеет смысл только тогда, когда строки таблицы отображаются (или пройдены), так как событие selectionchange инициируется на уровне таблицы, оно будет нулевым.

Необходимо отслеживать выбранные строки и получать выбранную строку из таблицы на основании этого:

<rich:extendedDataTable selection="#{carriBombolaiPMIBean.selection}" … >

...

private Collection<Object> selection;
private List<Item> selectionItems = new ArrayList<Item>();

public void selectionListener(AjaxBehaviorEvent event) {
    AbstractExtendedDataTable dataTable = (AbstractExtendedDataTable) event.getComponent();
    Object originalKey = dataTable.getRowKey();
    selectionItems.clear();
    for (Object selectionKey : selection) {
        dataTable.setRowKey(selectionKey);
        if (dataTable.isRowAvailable()) {
            selectionItems.add((Item) dataTable.getRowData());
        }
    }
    dataTable.setRowKey(originalKey);
}

Полный пример см. В демонстрационной версии для выбора строки .

...