Primefaces Lazyload + datatable + lazyDataModel

时间:2013-03-13 12:26:51

标签: primefaces datatable

我做了我的研究,发现了lazyload和dataTable的许多问题,但没有一个解释我遇到的问题。我实际上已经在Primefaces网站上发布了这个问题并且没有得到答案。我的问题太愚蠢或太复杂。

我们将我们的primefaces库从3.1.1更新到3.5,我们的LazyLoad数据表停止工作。基本上DataModel已经改变,所以我基于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());
}}

前端

<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"> 

3 个答案:

答案 0 :(得分:2)

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.");
}

你还需要实现一个(同样,我记得它足以实现第一个)。

答案 1 :(得分:1)

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

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

您尝试覆盖的加载方法仅在您使用多分类

时才会被覆盖

答案 2 :(得分:0)

你试过这个:http://forum.primefaces.org/viewtopic.php?f=3&t=29946?它对我有用(除了我正在研究的选择功能)。