Primefaces Lazyload+;数据表+;懒散数据模型

Primefaces Lazyload+;数据表+;懒散数据模型,primefaces,datatable,Primefaces,Datatable,我做了研究,发现了很多关于lazyload和dataTable的问题,但没有一个能解释我的问题。事实上,我已经在Primefaces网站上发布了这个问题,但没有得到任何答案。不是我的问题太愚蠢就是太复杂 我们将primefaces库从3.1.1更新到3.5,我们的LazyLoaddatatables停止工作。基本上,数据模型已经改变了,所以我基于Primefaces Showcase场景实现了一个新的数据模型 错误是:java.lang.UnsupportedOperationException

我做了研究,发现了很多关于
lazyload
和dataTable的问题,但没有一个能解释我的问题。事实上,我已经在Primefaces网站上发布了这个问题,但没有得到任何答案。不是我的问题太愚蠢就是太复杂

我们将primefaces库从3.1.1更新到3.5,我们的
LazyLoad
datatables停止工作。基本上,数据模型已经改变了,所以我基于Primefaces Showcase场景实现了一个新的数据模型

错误是:java.lang.UnsupportedOperationException:延迟加载是错误的 没有实施

问题是它是由类
LazyMethodDataModel
实现的,如下面的代码所示。 调试时,调用构造函数,但在调用load方法之前抛出错误

有什么想法吗?先谢谢你。如果你需要更多的信息,请告诉我

 public class LazyMethodDataModel_new extends LazyDataModel<Produto> {
@Override
public List<Produto> load(int first, int pageSize, List multiSortMeta, Map filters) { 
   generic.setRow(first);
   generic.setPage(pageSize);
  List objts = (List) Reflection.getObjectByInvokeMethod(crud, method, generic);
   return objts;

}
public LazyMethodDataModel_new(CrudFacade crud,String method,String   methodCount,GenericModel<?> generic) {

    this.crud = crud;
    this.generic = generic;        
    this.method = method;        
    size = (Integer) Reflection.getObjectByInvokeMethod(crud, methodCount, generic);
    setRowCount(size);
}
@Override
public void setRowIndex(int rowIndex) {
    /*
     * The following is in ancestor (LazyDataModel):
     * this.rowIndex = rowIndex == -1 ? rowIndex : (rowIndex % pageSize);
     */
    if (rowIndex == -1 || getPageSize() == 0) {
        super.setRowIndex(-1);
    }
    else
        super.setRowIndex(rowIndex % getPageSize());
}}
公共类LazymethodataModel\u新扩展LazyDataModel{
@凌驾
公共列表加载(int-first、int-pageSize、列表多端口元、映射筛选器){
generic.setRow(第一);
generic.setPage(页面大小);
List objts=(List)Reflection.getObjectByInvokeMethod(crud,方法,泛型);
返回objts;
}
公共LazyMethodDataModel_new(CrudFacade crud、字符串方法、字符串方法计数、GenericModel generic){
this.crud=crud;
this.generic=generic;
这个方法=方法;
size=(整数)Reflection.getObjectByInvokeMethod(crud、methodCount、generic);
setRowCount(大小);
}
@凌驾
公共void setRowIndex(int-rowIndex){
/*
*在祖先(LazyDataModel)中有以下内容:
*this.rowIndex=rowIndex=-1?rowIndex:(rowIndex%pageSize);
*/
如果(rowIndex=-1 | | getPageSize()==0){
super.setRowIndex(-1);
}
其他的
super.setRowIndex(rowIndex%getPageSize());
}}
前端

<p:dataTable id="listProduto" var="model" value="#{adminProdutoBean.lazyDataModel}" 
             paginator="true" rows="10"  
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
             rowsPerPageTemplate="5,10,15" lazy="true"> 

LazyDataModel中有两种
加载方法:

public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}

public List<T> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String,String> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
抛出新的UnsupportedOperationException(“未实现延迟加载”);
}
公共列表加载(int-first、int-pageSize、列表多端口元、映射过滤器){
抛出新的UnsupportedOperationException(“未实现延迟加载”);
}

您还需要实现一个(我记得,实现第一个就足够了)。

LazyDataModel中有两个
load
方法:

public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}

public List<T> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String,String> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
抛出新的UnsupportedOperationException(“未实现延迟加载”);
}
公共列表加载(int-first、int-pageSize、列表多端口元、映射过滤器){
抛出新的UnsupportedOperationException(“未实现延迟加载”);
}

您还需要实现一个(我记得,实现第一个就足够了)。

您尝试过这个吗:?它对我有效(我正在使用的选择功能除外)。

你试过这个吗:?它对我有效(我正在处理的选择功能除外)。

如果没有启用多重排序,则必须覆盖其他加载方法

    public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
抛出新的UnsupportedOperationException(“未实现延迟加载”);
}

只有在使用多排序时,才尝试覆盖加载方法。如果未启用多排序,则必须覆盖其他加载方法

    public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
抛出新的UnsupportedOperationException(“未实现延迟加载”);
}

仅当您使用多排序时,才尝试覆盖加载方法。

Hello,ty for your answer。如果您看到第一个代码,我已经实现了load方法,如果您检查primefaces showcase示例,他们也只实现了一个load方法。您是说我有义务实现两个load方法吗?对于我的项目(使用3.5),只实现了load(int first,int pageSize,String sortField,SortOrder,Map filters)(与代码示例中的不同)嗯,我明白了,我想我实现了错误的一个。我要尝试实现另一个,看看!tyvm!嘿,我实现了你说的那个方法,它成功了!它调用了load方法,但paginator不起作用。在文档中,它说每次用户按下分页按钮,datagrid都应该调用load方法,但那不是发生了!有什么想法吗?您好,请回答。如果您看到第一个代码,我已经实现了加载方法,并且如果您检查primefaces showcase示例,他们也只实现了一个加载方法。您是说我有义务实现两个加载方法吗?对于我的项目(3.5版),只实现加载(int first、int pageSize、String sortField、SortOrder SortOrder、Map filters)已实现(与代码示例中的不同)嗯,我明白了,我想我实现了错误的一个。我要尝试实现另一个,看看!tyvm!嘿,我实现了你说的那个方法,它成功了!它调用了load方法,但paginator不起作用。在文档中,它说每次用户按下分页按钮,datagrid都应该调用load方法,但那不是没发生!有什么想法吗?