2013-03-13 77 views
0

我做了我的研究,發現lazyload和dataTable有很多問題,但沒有一個解釋我遇到的問題。我實際上已經在Primefaces網站上發佈了這個問題,但沒有得到答案。要麼我的問題太愚蠢,要麼太複雜。Primefaces Lazyload + datatable + lazyDataModel

我們將我們的primefaces庫從3.1.1更新到3.5,並且我們的LazyLoad數據錶停止工作。基本上DataModel已經改變了,所以我實現了一個基於Primefaces Showcase場景的新模型。

The error is: java.lang.UnsupportedOperationException: Lazy loading is not implemented.

這個東西是由類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"> 

回答

2

有兩種load方法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."); 
} 

,你需要實現一個多(也,我記得它是否足以執行第一個)。

+0

你好,TY爲你解答。如果你看到第一個代碼,我已經實現了load方法,並且如果你檢查primefaces showcase的例子,他們也只實現了一個加載方法。 – user2165181 2013-03-13 21:56:23

+0

你是說我有義務實施兩種加載方法? – user2165181 2013-03-13 21:56:54

+0

對於我的項目(與3.5)只能加載(int first,int pageSize,String sortField,SortOrder sortOrder,Map filters)實現(與您的代碼示例中不一樣) – 2013-03-13 21:57:53

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

你試圖覆蓋Load方法僅如果使用multisorting