2012-01-13 36 views
5

私は遅延読み込みでテーブルを実装しようとしています。私はデモページとドキュメントからすべてのステップを得たと思うが、私はいつも「レコードが見つかりません」というメッセージを得る。私はsetRowIndexをオーバーライドする必要がありますか、私が手Primefaces: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()); 
} 

テーブルのページ:

<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私は、少なくとも1つのレコードがあるはず、私は表現をminimunするコードを削減したと思います例外 "java.lang.ArithmeticException:/ 0によって"。私はprimefaces-3.1-SNAPSHOT、jsf 2.0.3、およびtomcat 6.0を使用しています。助けてください。私は何が欠けているのですか?

+0

なぜ古いスナップショットPF版を使用していますか?最新の安定版をお試しください。 http://primefaces.org/downloads.html –

答えて

0

LazyDataModel#getRowKeyLazyDataModel#getRowDataも実装する必要があります。その後

class Empresa { 

    private long id; 
    private String nombre; 

    // getters and setters... 

} 

は、あなたのようなものがあるとし

  • getRowKey
  • getRowDataがIDでEmpresaオブジェクトを取得EmpresaオブジェクトのIDを返します
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

残念ながら私はその会社をしばらく前に去りましたので、今はテストすることはできませんが、ありがとうございます! –

2

あなたのDataTableのlazy=trueを追加します。 このデータテーブルを追加した後、load()メソッドを呼び出すことができます。

0

ロードメソッドを呼び出すことはありません。プライムフェイスデータテーブル宣言の前にloadメソッドを呼び出します。

0

あなたはこのフィールド(rowCount)にしてから、レコードの数のあなたのload(...)方法の設定値で、リスト内のフィールドprivate int rowCount; を追加する必要があります。 このアイテムがないと、<p:dataTable ...>は「レコードが見つかりません」を取得し、rows ="10"(たとえば)属性を指定しないと、行がレンダリングされません。

関連する問題