我在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)
时为空。有人知道可能是什么问题吗?
答案 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。