[RESOLVIDO]Lazy=true, nao aparece os registros

8 respostas
E

pessoal, implementei a rotina abaixo, porem contem registro no meu banco de dados, porem nao aparece nenhum registro no datatable, segue abaixo o meu codito :

****bean 

    private List<Cadusu> cadusu;

    private LazyDataModel<Cadusu> dataModel;


    public LazyDataModel<Cadusu> getDataModel() {
                @Override  
                public List<Cadusu> load(int first, int pageSize, String string, boolean bln, Map<String, String> map) {  
                    List<Cadusu> list = cadususervico.buscafindCadusu(first, pageSize);
                    return list;  
                }  */

                    @Override
                    public List<Cadusu> load(int i, int i1, String string, SortOrder so, Map<String, String> map) {
                           List<Cadusu> list = cadususervico.buscafindCadusu(i, i1);
                           return list;  
                    }
            };  
            dataModel.setPageSize(10);  
        }  
        return dataModel; 
 }  


****dao 

 @Interceptors({GerenciaTransacaoInterceptor.class})  
   public List<Cadusu> findCadusu(int startingAt, int maxPerPage) {
               String query = "select u from Cadusu u where u.status = 'ATIVO'";                      
               
               emAux.createQuery(query).setHint("eclipselink.refresh", true).
                       setFirstResult(startingAt).setMaxResults(maxPerPage).getResultList();
         
               return (List<Cadusu>) emAux.createQuery(query).getResultList();            
	}


**********View

            <p:dataTable id="lazyDataTablenovo" value="#{cadguiaMbean.dataModel}" var="cadusu" paginator="true" rows="10"
                         dynamic="true"
                         lazy="true"
                         selection="#{cadguiaMbean.cadusu}" selectionMode="single"
				paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
				rowsPerPageTemplate="5,10,15" style="width: 80%;margin-left: 10%;margin-right: 10%;">

				<p:ajax event="rowSelect" update=":playerDialogForm" oncomplete="playerDetails.show()" />

				<p:column>
					<f:facet name="header">Name</f:facet>
                                        <h:outputText value="#{cadusu.nomeusu}" />
				</p:column>
	     </p:dataTable>

Alguem pode me dar alguma dica ??

8 Respostas

douglas_arantes

Está lançando alguma exceção?

LazyInizializationException ??

E

Aonde eu coloco essa excecao?

douglas_arantes

Não sei se entendeu direito, mas eu perguntei se seu código lança alguma exceção.

E

nao sei se ajuda:
o exemplo abaixo eu fiz e funcionou na boa

xhtml

<p:dataTable id="tabela1" value="#{usuariobibJsfBean.usuariosList}" var="item"
                                     emptyMessage="Nenhum registro encontrado." 
                                     paginator="true" rows="25"  pageLinks="10"
                                     paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} 
                                     {NextPageLink} {LastPageLink} Registros por página: {RowsPerPageDropdown}"
                                     rowsPerPageTemplate="15,25,35,50" lazy="true">
                            <f:facet name="header">
                                #{usuariobibJsfBean.usuariosList.rowCount} registros encontrados. // contas os registros
                            </f:facet>

                            <p:column headerText="Código" style="width:07%">
                                <h:outputText value="#{item.usuCodigo}" />  
                            </p:column>

// continua

bean

// declaração
private LazyDataModel<Usuariobib> usuariosList;

// metodo
usuariosList = new LazyDataModel<Usuariobib>() {

            @Override
            public List<Usuariobib> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return u.listaUsuariobibPaginada(montaParametros(), first, pageSize, sortField, sortOrder);
// retorna a lista lazy
            }
        };
        usuariosList.setRowCount(u.listaUsuariobibCount(montaParametros()));
// funcao que conta os registros
    }

service

@Interceptors(AuditInterceptor.class)
    public List<Usuariobib> listaUsuariobibPaginada(Map<String, Object> montaParametros, int first, int pageSize, String sortField, org.primefaces.model.SortOrder sortOrder) {
        log.debug("########### sortField: " + sortField);
        log.debug("########### sortOrder: " + sortOrder);
        String orderBy = ServiceUtil.montaOrderBy(sortField, true, PREFIXO_OBJETO);
        FiltrosConsulta filtros = criaFiltros(montaParametros);
        return crudService.executeQuery(QUERY_Usuarios, orderBy, first, pageSize, filtros, null);
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public int listaUsuariobibCount(Map<String, Object> montaParametros) {
        FiltrosConsulta filtros = criaFiltros(montaParametros);
        Long resultado = (Long) crudService.executeQuery("select COUNT(u) from Usuariobib u ", null, filtros).get(0);
        return resultado.intValue();
    }

valeu !

E

Vlw poderia postar os metodos:

Serviceutil.montaorderby e

Crudservice.executaquery

Muito obrigado

E
***************** View

            <p:dataTable id="lazyDataTablenovo1" value="#{cadguiaMbean.usuariosList}" var="cadusu" pemptyMessage="Nenhum registro encontrado."   
                                     paginator="true" rows="25"  pageLinks="10"  
                                     paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}   
                                     {NextPageLink} {LastPageLink} Registros por página: {RowsPerPageDropdown}"  
                                     rowsPerPageTemplate="15,25,35,50" lazy="true">

				<p:column>
					<f:facet name="header">Name</f:facet>
                                        <h:outputText value="#{cadusu.nomeusu}" />
				</p:column>
	     </p:dataTable>
	     
***************** Bean

    
    private List<Cadusu> cadusu;
    
    private LazyDataModel<Cadusu> usuariosList; 
    
    
    
    
    @Override
    public void iniciarView() {
            item = listaespec();   
            
    usuariosList = new LazyDataModel<Cadusu>() {    
                @Override  
                public List<Cadusu> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {  
                    return cadususervico.buscafindCadusu(first, pageSize);
    // retorna a lista lazy  
                }            
            };  
         usuariosList.setRowCount(cadususervico.buscacountCadusuTotal());  
    // funcao que conta os registros  
 }

Esta aparecendo os registro , porem gostaria de usar o “filterBy” como ficaria o meu “load” do meu bean ???

E

Pessoal, consegui fazer o filtro da seguinte forma :

public List<Cadusu> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {  
                int paginacao; 
                paginacao = 0;
                
                
                 for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
                     String filterProperty = it.next(); // table column name = field name
                     System.out.println("filterProperty is: " + filterProperty);

                     String filterValue = filters.get(filterProperty);
                     System.out.println("filterValue is: " + filterValue);                    
                     
                     String Clausula = "and u."+filterProperty+" like'%"+filterValue+"%'";
                     System.out.println("filterValue is: " + Clausula);     
                     paginacao=1;
                     cadusu = cadususervico.buscafindCadusu(first, pageSize,Clausula);

                  }                
                
//                return cadususervico.buscafindCadusu(first, pageSize,"");
                 
                 if (paginacao==0){
                    cadusu = cadususervico.buscafindCadusu(first, pageSize,"");
                 }
                 
                  return cadusu;
            }            
        };  
     usuariosList.setRowCount(cadususervico.buscacountCadusuTotal());  

***************************** dao 

   public List<Cadusu> findCadusu(int startingAt, int maxPerPage,String clausulapage) {
       String query="";
          if (clausulapage == ""){
               String queryinterna = "select u from Cadusu u where u.status = 'ATIVO'";   
               query=queryinterna;
           }    
          
          if (clausulapage != ""){
               String queryinterna = "select u from Cadusu u where u.status = 'ATIVO'"+clausulapage;   
               query=queryinterna;
           }    
          
               emAux.createQuery(query).setHint("eclipselink.refresh", true).
                       setFirstResult(startingAt).setMaxResults(maxPerPage).getResultList();
         
               return (List<Cadusu>) emAux.createQuery(query).getResultList();            
            
               
	}

O problema agora nao esta paginando , alguem pode me ajudar ??

E

depois de muita luta e batalha, consegui fazer o Lazy…

segue abaixo a solucao do problema de cima

return (List<Cadusu>) emAux.createQuery(query).setHint("eclipselink.refresh", true).
                                         setFirstResult(startingAt).setMaxResults(maxPerPage).getResultList();

Obrigado a todos

Criado 11 de fevereiro de 2013
Ultima resposta 14 de fev. de 2013
Respostas 8
Participantes 3