Jsf 使用LazyDataModel进行celledit时,Rowkey为null
我使用的是PrimeFaces 6.1。我已经实现了LazyDataModel,并且我能够加载行,但是,当我更新一个单元格时,会调用onCellEdit方法,但是event.rowKey总是空的Jsf 使用LazyDataModel进行celledit时,Rowkey为null,jsf,primefaces,Jsf,Primefaces,我使用的是PrimeFaces 6.1。我已经实现了LazyDataModel,并且我能够加载行,但是,当我更新一个单元格时,会调用onCellEdit方法,但是event.rowKey总是空的 <p:dataTable emptyMessage="Nessun record trovato." style="margin-top: 50px" id="cars" var="produit"
<p:dataTable emptyMessage="Nessun record trovato."
style="margin-top: 50px" id="cars" var="produit"
value="#{gecomparBean.lazyModel}"
editable="true" editMode="cell" widgetVar="carsTable"
filteredValue="#{gecomparBean.filteredCars}"
rows="10"
lazy="true"
scrollRows="10"
scrollable="true" liveScroll="true" scrollHeight="250"
resizableColumns="true" resizeMode="expand"
draggableColumns="true"
rowStyleClass="#{produit.id == gecomparBean.selectedObject.id ? 'selectedRow' : null}"
>
<p:ajax event="colReorder"
listener="#{gecomparBean.onColumnReorder}" />
<p:ajax event="cellEdit" listener="#{gecomparBean.onCellEdit}"
oncomplete="updateTable()" update=":form:remote" />
LazyProductDataModel
public class LazyProductDataModel extends LazyDataModel<ProductSessionDTO> implements Serializable {
private List<ProductSessionDTO> products;
private ProductSearchWrapper wrapper;
public LazyProductDataModel(ProductSearchWrapper wrapp) throws RestRequestException {
super();
wrapper = wrapp;
}
@Override
public ProductSessionDTO getRowData(String rowKey) {
for (ProductSessionDTO car : getProducts()) {
if (car.getId() == (Long.parseLong(rowKey))) {
return car;
}
}
return null;
}
@Override
public Object getRowKey(ProductSessionDTO car) {
return car.getId();
}
@Override
public List<ProductSessionDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
List<ProductSessionDTO> data = new ArrayList<ProductSessionDTO>();
try {
System.out.println("First " + first + " Max " + pageSize);
wrapper.setFirst(first);
wrapper.setPageSize(pageSize);
products=ServiceUtils.getInstance().getProducts(wrapper);
if (getProducts() != null) {
Comparator<ProductSessionDTO> lengthComparator = new Comparator<ProductSessionDTO>() {
@Override
public int compare(ProductSessionDTO o1, ProductSessionDTO o2) {
return Long.compare(o1.getId(), o2.getId());
}
};
Collections.sort(products, lengthComparator);
}
} catch (RestRequestException ex) {
Logger.getLogger(LazyProductDataModel.class.getName()).log(Level.SEVERE, null, ex);
}
data = products;
//rowCount
int dataSize = data.size();
this.setRowCount(1000);
//paginate
if (dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
} catch (IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
} else {
return data;
}
}
公共类LazyProductDataModel扩展LazyDataModel实现可序列化{
私人上市产品;
私有产品搜索包装器;
公共LazyProductDataModel(ProductSearchWrapper wrapp)抛出RestRequestException{
超级();
包装纸=包装纸;
}
@凌驾
public ProductSessionTo getRowData(字符串rowKey){
对于(ProductSessionTo汽车:getProducts()){
if(car.getId()==(Long.parseLong(rowKey))){
返回车;
}
}
返回null;
}
@凌驾
公共对象getRowKey(ProductSessionTo汽车){
return car.getId();
}
@凌驾
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
列表数据=新的ArrayList();
试一试{
System.out.println(“第一个”+第一个+“最大”+页面大小);
wrapper.setFirst(first);
wrapper.setPageSize(pageSize);
products=ServiceUtils.getInstance().getProducts(包装器);
如果(getProducts()!=null){
比较器长度比较器=新比较器(){
@凌驾
公共整数比较(ProductSessionDTO o1,ProductSessionDTO o2){
返回Long.compare(o1.getId(),o2.getId());
}
};
集合。排序(产品、长度比较器);
}
}捕获(RestRequestException ex){
Logger.getLogger(LazyProductDataModel.class.getName()).log(Level.SEVERE,null,ex);
}
数据=产品;
//行数
int dataSize=data.size();
这个.setRowCount(1000);
//分页
如果(数据大小>页面大小){
试一试{
返回数据。子列表(第一,第一+页面大小);
}catch(IndexOutOfBoundsException e){
返回数据。子列表(第一,第一+(数据大小%pageSize));
}
}否则{
返回数据;
}
}
}
注意:我发现一篇帖子提到,为了自动调用getRowKey(),我们需要删除rowkey,因此我删除了该属性。事件中有什么?这可能会解决您的问题:事件中有什么?这可能会解决您的问题:
public class LazyProductDataModel extends LazyDataModel<ProductSessionDTO> implements Serializable {
private List<ProductSessionDTO> products;
private ProductSearchWrapper wrapper;
public LazyProductDataModel(ProductSearchWrapper wrapp) throws RestRequestException {
super();
wrapper = wrapp;
}
@Override
public ProductSessionDTO getRowData(String rowKey) {
for (ProductSessionDTO car : getProducts()) {
if (car.getId() == (Long.parseLong(rowKey))) {
return car;
}
}
return null;
}
@Override
public Object getRowKey(ProductSessionDTO car) {
return car.getId();
}
@Override
public List<ProductSessionDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
List<ProductSessionDTO> data = new ArrayList<ProductSessionDTO>();
try {
System.out.println("First " + first + " Max " + pageSize);
wrapper.setFirst(first);
wrapper.setPageSize(pageSize);
products=ServiceUtils.getInstance().getProducts(wrapper);
if (getProducts() != null) {
Comparator<ProductSessionDTO> lengthComparator = new Comparator<ProductSessionDTO>() {
@Override
public int compare(ProductSessionDTO o1, ProductSessionDTO o2) {
return Long.compare(o1.getId(), o2.getId());
}
};
Collections.sort(products, lengthComparator);
}
} catch (RestRequestException ex) {
Logger.getLogger(LazyProductDataModel.class.getName()).log(Level.SEVERE, null, ex);
}
data = products;
//rowCount
int dataSize = data.size();
this.setRowCount(1000);
//paginate
if (dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
} catch (IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
} else {
return data;
}
}