olá, galera
minha implementação de LazyDataModel não carrega na view, embora a List retornada pelo método load() do meu LazyTableModel não seja vazia.
alguém pode ajudar ? 
minha dataTable
<p:dataTable emptyMessage="Nenhum movimento." rowKey="#{nfe.idNFe}"
rowIndexVar="rowIndex"
var="nfe"
value="#{spedMB.NFeController.NFeTableModel}"
selectionMode="multiple">
//colunas da dataTable...
</p:dataTable>
e o controle
public class NFeTableModel extends LazyDataModel<ArquivoXML> {
private List<ArquivoXML> arquivos;
@Override
public List<ArquivoXML> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
System.out.println("******************* LIST NFE :"+arquivos.size()); //não é null **********
this.setRowCount(arquivos.size());
this.setPageSize(5);
return arquivos;
}
@Override
public Object getRowKey(ArquivoXML xml) {
return xml.getIdNFe();
}
// o campo arquivos é inicializado por outra classe q obtem a lista primeiro, e então 'seta' o resultado aqui
public void setArquivos(List<ArquivoXML> arquivos) {
this.arquivos = arquivos;
}
}
o legal também seria fazer a consulta com Ajax.
tente assim:
index.xhtml
<p:dataTable value="#{managedBean.dataModel}" var="item" rows="5" paginator="true" dynamic="true" lazy="true">
ManagedBean.java
public class ManagedBean implements Serializable {
private LazyDataModel dataModel;
public ManagedBean() {
int totalRegistos = ... // aqui voce pode fazer uma consulta e retornar o total de registros
dataModel = new SeuDataModel();
dataModel.setRowCount( totalRegistros );
dataModel.setPageSize( 5 );
}
}
Revivendo o tópico .
Estou com o mesmo problema. Como resolveu ?
Meu LazyDataModel está carregado, certinho.
Mas nada é exibido na view.
Opa …
achei …
no meu caso faltava setar o RowCount : this.setRowCount(data.size());
public class LazyClienteDataModel extends LazyDataModel<ClienteBean> {
@Override
public List<ClienteBean> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
List<ClienteBean> data = new ArrayList<ClienteBean>();
try {
data = ClienteController.getInstance().getClientesPaginado(sortField== null ? "nome" : sortField, "asc", pageSize, first);
this.setRowCount(data.size());
System.out.println("LazyClienteDataModel.load()");
} catch (DaoException e) {
e.printStackTrace();
}
return data;
}
Valeu :-o
Só pra deixar registrado, eu tive exatamente o mesmo problema e isso resolveu.
this.setRowCount(data.size());
lembrando que eu fiz um count para saber quantos registros no total o filtro retorna.
so pra registrar tb,
em setRowCount() coloquei o total geral de registros relacionados, sem nenhum filtro,
mas a list de retorno é filtrada, algo como
@Override
public List<Arquivo> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
//em jpql pode-se usar as funcoes setMaxResult(), e setFirstResult() para auxiliar no filtro
//os valores de 'first' vão variando de acordo com a paginacao
this.arquivos = documentoService.getArquivos(first, first + pageSize);
this.setRowCount(this.numeroRegistros);
return arquivos;
}
ref: http://hrycan.com/2012/03/28/primefaces-lazy-loading-datatable-for-jsf2/