2012-01-13 100 views
5

我試圖用延遲加載實現一個表。我認爲我從演示頁面和文檔中獲得了所有步驟,但我總是收到「找不到記錄」消息。我想我已經減少了代碼minimun表達,至少應該有一個記錄:Primefaces:實現LazyDataModel

表頁:

<h:form id="listaEmpresas"> 
<p:dataTable id="tablaEmpresas" value="#{empresasTableMB.lazyDataModel}" var="empresa"> 
        <p:column> 
         <f:facet name="header"> 
          <h:outputText value="#{msgs.empresa_tabla_nombre}"/> 
         </f:facet> 
         <h:outputText value="#{empresa.nombre} "/> 
        </p:column> 

</p:dataTable> 
</h:form> 

LazyDataModel:

@Override 
public List<Empresa> load(int first, int pageSize, String sortField, SortOrder so, Map<String, String> filters) { 
    List<Empresa> listaEmpresas = new ArrayList(); 
    Empresa e = new Empresa(); 
    e.setNombre("Company"); 
    listaEmpresas.add(e); 
    this.setRowCount(1); 
    return listaEmpresas; 
} 


@Override 
public void setRowIndex(int rowIndex) { 
    if (rowIndex == -1 || getPageSize() == 0) { 
     super.setRowIndex(-1); 
    } 
    else 
     super.setRowIndex(rowIndex % getPageSize()); 
} 

我必須重寫setRowIndex或我得到一個異常「java.lang.ArithmeticException:/ by零」。我正在使用primefaces-3.1-SNAPSHOT,jsf 2.0.3和tomcat 6.0。請幫忙。我錯過了什麼?

+0

爲什麼你使用這麼舊的快照PF版本?嘗試最新的穩定版本。 http://primefaces.org/downloads.html – 2013-01-14 21:55:50

回答

0

您還需要實施LazyDataModel#getRowKeyLazyDataModel#getRowData

假設你有這樣的:

class Empresa { 

    private long id; 
    private String nombre; 

    // getters and setters... 

} 

然後:

  • getRowKey返回ID爲Empresa對象
  • getRowData由ID獲取一個Empresa對象
class MyLazyDataModel { 

    // stuff you already have comes here... 

    public Empresa getRowData(String rowKey) { 
     return empresaRepository.getEmpresaById(Long.valueOf(rowKey)); 
    } 

    public Object getRowKey(Empresa empresa) { 
     return empresa.getId(); 
    } 

} 
+0

不幸的是我前一段時間離開了那家公司,所以我現在無法測試它,但謝謝! – 2013-06-03 12:32:03

2

在dataTable中添加lazy=true。 添加此數據表後可以調用您的load()方法。

0

您並未調用load method.first在素數面數據表聲明之前調用load方法。

0

你需要添加字段private int rowCount; ,然後在列表中該領域(rowCount)記錄的數量您load(...)方法設定值。 沒有這個東西<p:dataTable ...>將獲得「找不到記錄」,並且如果您沒有指定rows ="10"(例如)屬性,它將不會呈現行!

相關問題