[resolvido] primeFaces 3.0: LazyDataModel não carrega a lista na view

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 ? :slight_smile:

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/