How determine records in List using @Factory and extendedDataTable?
akopylov May 17, 2010 9:00 AMHello.
I use @DataModel and @Factory seam-annotations to make data-list, and use it with extendedDataTable.
In fact, my data model is a List<>.
And everything is ok except one very difficult thing: I can't identify current record when is making selection in a table. The reason: selection has index of row, but I need id.
I saw the example at demo: http://livedemo.exadel.com/richfaces-demo/richfaces/extendedDataTable.jsf?c=extendedDataTable&tab=usage
But it't not my way. This example use ExtendedTableDataModel and DataProvider. And I don't want to use it instead of seam-annotations.
My code is:
<rich:extendedDataTable
id="nummBillsTable"
value="#{numBillList}"
var="currentNumBill"
selection="#{rpdAction.selectionNumBill}"
selectionMode="single"
tableState="#{rpdAction.numBillTableState}"
enableContextMenu="false"
rows="10"
height="500px"
width="1700px">
<a4j:support event="onselectionchange"
action="#{rpdAction.takeCurrentNumBill}"
reRender="changeValue, addValue, removeValue, changeNumBillPanel, addNumBillPanel">
</a4j:support>
<!--Some columns with sortBy-->
</rich:extendedDataTable>
@Name("rpdAction")
@Scope(ScopeType.PAGE)
public class RpdAction {
@DataModel
private List<NumBill> numBillList;
private SimpleSelection selectionNumBill = new SimpleSelection();
@Factory("numBillList")
public void initNumBillList() {
if (numBillList == null)
getNumBillList();
}
public void takeCurrentNumBill() {
Iterator<Object> iterator = getSelectionNumBill().getKeys();
while (iterator.hasNext()) {
int key = (Integer) iterator.next();
// key has index of current record in view.
// And if was sorting before, this index is wrong, I can't use the code:
currentNumBill = numBillList.get(key);
}
}
public void setScrollerNumBillTable(int scrollerNumBillTable) {
// in this method variable scrollerNumBillTable has index or row (not id)
this.scrollerNumBillTable = scrollerNumBillTable;
}
public SimpleSelection getSelectionNumBill() {
return selectionNumBill;
}
}