2012-01-13 53 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"(例如)属性,它将不会呈现行!