extendedDataTable 中的行选择问题

Problem with row selection in extendedDataTable

我对 richfaces 中的 extendedDataTable 有疑问。我正在尝试 select extendedDataTable 中的一行并且 selection 有效。这是我正在使用的一些代码。

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

问题是传递给方法 carriBombolaiPMIBean.updateCheckboxErogazioneEvPub(doc) 的变量 doc 为空。有人知道问题出在哪里吗?

您的 doc 变量仅在呈现(或遍历)table 行时才有意义,因为 selectionchange 事件是在 table 级别上触发的,它将为空。

您需要跟踪所选行并根据此从 table 中获取所选行:

<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