Problem with ExtendedTableDataModel and rich:dataTable
dmitri.ilyin Dec 16, 2008 7:40 AMHi,
i'm trying to use ExtendedTabledataModel with rich:dataTable.
I have implemented my DataProvider, here is the code:
public class DiscreteTaskProvider implements DataProvider<DiscreteTask> { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(DiscreteTaskProvider.class); private List<DiscreteTask> items; public DiscreteTaskProvider() { } public DiscreteTaskProvider(List<DiscreteTask> items) { this.items = items; } public void setItems(List<DiscreteTask> items) { this.items = items; } public DiscreteTask getItemByKey(Object key) { DiscreteTask result = null; if (key != null) for (DiscreteTask entity : getItems()) if (key.equals(new DisplayableKey(entity))) { result = entity; break; } return result; } public List<DiscreteTask> getItems() { return items; } public List<DiscreteTask> getItemsByRange(int firstRow, int lastRow) { return getItems().subList(firstRow, lastRow); } public Object getKey(DiscreteTask item) { return new DisplayableKey(item); } public int getRowCount() { return getItems().size(); } }
I'm using my Own Class DisplayableKey as PK. So it is not a Integer. And it seems that this makes problem with rich:dataTable. The first load and show of table in browser just works but I get an exception if i try to sort the table.
Caused by: javax.faces.convert.ConverterException: j_id33:dtTable: Could not convert '0' to a string. at javax.faces.convert.IntegerConverter.getAsString(IntegerConverter.java:151) at org.ajax4jsf.component.UIDataAdaptor.getClientId(UIDataAdaptor.java:715) at javax.faces.component.UIComponent.getContainerClientId(UIComponent.java:374) at javax.faces.component.UIComponentBase.getClientId(UIComponentBase.java:279) at org.ajax4jsf.component.UIDataAdaptor.restoreChildState(UIDataAdaptor.java:964) at org.ajax4jsf.component.UIDataAdaptor.restoreChildState(UIDataAdaptor.java:986) at org.ajax4jsf.component.UIDataAdaptor.restoreChildState(UIDataAdaptor.java:943) at org.ajax4jsf.component.UIDataAdaptor.setRowKey(UIDataAdaptor.java:361) at org.ajax4jsf.component.UIDataAdaptor$ComponentVisitor.process(UIDataAdaptor.java:95) at org.richfaces.model.ExtendedTableDataModel.walk(ExtendedTableDataModel.java:183) at org.ajax4jsf.component.UIDataAdaptor.walk(UIDataAdaptor.java:1151) at org.ajax4jsf.component.UIDataAdaptor.iterate(UIDataAdaptor.java:1042) ... 40 more Caused by: java.lang.ClassCastException: com.tsystems.eurojet.ejfin.de.DisplayableKey cannot be cast to java.lang.Number at javax.faces.convert.IntegerConverter.getAsString(IntegerConverter.java:149) ... 51 more
With rich:extendedDataTable no problem.
What could be wrong here?
thanks a lot
Dmitri