在extendedDataTable中选择行的问题

时间:2019-06-13 13:44:53

标签: datatable richfaces selection

我在richfaces中遇到了ExtendedDataTable的问题。我试图在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 个答案:

答案 0 :(得分:1)

您的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);
}

有关完整示例,请参见展示柜中的row selection demo