Jsf 使用LazyDataModel进行celledit时,Rowkey为null

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"

我使用的是PrimeFaces 6.1。我已经实现了LazyDataModel,并且我能够加载行,但是,当我更新一个单元格时,会调用onCellEdit方法,但是event.rowKey总是空的

     <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;
    }
}