我正在尝试使用延迟加载实现一个表.我想我从演示页面和文档中得到了所有步骤,但我总是得到"没有找到记录"的消息.我想我已经将代码减少到最小化表达式,至少应该有一条记录:
表页面:
<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>
Run Code Online (Sandbox Code Playgroud)
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());
}
Run Code Online (Sandbox Code Playgroud)
我必须覆盖setRowIndex或者我得到一个异常"java.lang.ArithmeticException:/ by zero".我正在使用primefaces-3.1-SNAPSHOT,jsf 2.0.3和tomcat 6.0.请帮忙.我错过了什么?
您还需要实施LazyDataModel#getRowKey和。LazyDataModel#getRowData
假设你有类似的东西:
class Empresa {
private long id;
private String nombre;
// getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
然后:
getRowKeyEmpresa返回对象的 idgetRowDataEmpresa通过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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10224 次 |
| 最近记录: |