I am using primefaces 5.2 with JBoss AS 7.
I would like to use an editable row within a lazy dataTable. My obects are in the scope request. Here is my xhtml :
Code: Select all
<h:form>
<p:dataTable id="myTable" value="#{myList}" var="_list" lazy="true" rows="10" paginator="true" editable="true">
<p:ajax event="rowEdit" listener="#{myController.onRowEdit}" />
<p:ajax event="rowEditCancel" listener="#{myController.onRowCancel}" />
...
<p:column>
<p:rowEditor />
</p:column>
</p:dataTable>
</h:form>
Code: Select all
public class MyLazyDataModel extends LazyDataModel<MyObject> {
...
@Override
public MyObject getRowData(String rowKey) {
return em.find(MyObject.class, new Integer(rowKey));
}
@Override
public Object getRowKey(MyObject myObject{
return myObject.getId();
}
@Override
public List<MyObject> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {...}
}
So I went two level upper on the stack trace and I notice a big diference between row selection and row edition to explain "the difference of behavior" :
Code: Select all
public class DataTable extends UIData implements org.primefac... {
...
@Override
public void queueEvent(FacesEvent event) {
...
// Working :
if(eventName.equals("rowSelect")||eventName.equals("rowSelectRadio")||eventName.equals("contextMenu")
||eventName.equals("rowSelectCheckbox")||eventName.equals("rowDblselect")) {
String rowKey = params.get(clientId + "_instantSelectedRowKey");
wrapperEvent = new SelectEvent(this, behaviorEvent.getBehavior(), this.getRowData(rowKey));
}
else if(eventName.equals("rowUnselect")||eventName.equals("rowUnselectCheckbox")) {
String rowKey = params.get(clientId + "_instantUnselectedRowKey");
wrapperEvent = new UnselectEvent(this, behaviorEvent.getBehavior(), this.getRowData(rowKey));
}
...
// Not working ?
else if(eventName.equals("rowEdit")||eventName.equals("rowEditCancel")||eventName.equals("rowEditInit")) {
int rowIndex = Integer.parseInt(params.get(clientId + "_rowEditIndex"));
setRowIndex(rowIndex);
wrapperEvent = new RowEditEvent(this, behaviorEvent.getBehavior(), this.getRowData());
}
}
...
}