PrimeFaces Lazy Loading Ayuda...gracias

Iniciado por visualfree, 9 Octubre 2015, 15:32 PM

0 Miembros y 1 Visitante están viendo este tema.

visualfree

Ayuda con datatable y lazy loading.



           <p:dataTable  id="paises" var="pais" value="#{paisBean.lazyModel}"
                         paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}  "
                         paginator="true" rows="10" style="margin-bottom:20px"
                         rowKey="#{pais.id}"
                         selection="#{paisBean.pais}"
                         lazy="true"
                         selectionMode="single" >
               <p:column headerText="Id" width="100" filterBy="#{pais.id}"  filterMatchMode="contains">
                   <h:outputText value="#{pais.id}" style="font-size:12px" />
               </p:column>
               <p:column headerText="Nombre" filterBy="#{pais.nombre}"  filterMatchMode="contains">
                   <h:outputText value="#{pais.nombre}" style="font-size:12px" />
               </p:column>
               <p:column headerText="Estado" filterBy="#{pais.estado}"  filterMatchMode="contains">
                   <h:outputText value="#{pais.estado}" style="font-size:12px" />
               </p:column>
               <p:column  width="30" exportable="false">
                   <p:commandButton icon="ui-icon-search" style="width:20px;height:20px"  update=":form:display" oncomplete="PF('paisDialog').show()" />
               </p:column>
               <p:column  width="30" exportable="false">
                   <p:commandButton icon="ui-icon-trash" style="width:20px;height:20px"/>
               </p:column>
               <p:column  width="30" exportable="false">
                   <p:commandButton icon="ui-icon-refresh" style="width:20px;height:20px" />
               </p:column>
           </p:dataTable>





package com.ricardo.bean;

import com.ricardo.daos.PaisDAO;
import com.ricardo.daos.PaisDAOInterface;
import com.ricardo.daos.UsuarioDAO;
import com.ricardo.models.Pais;
import com.ricardo.models.Usuario;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

@ManagedBean
@ViewScoped
public class PaisBean implements Serializable {

   public Pais pais = new Pais();
   public PaisDAO pDAO = new PaisDAO();
   /*LAZY */
   private LazyDataModel<Pais> lazyModel;
   @PostConstruct  
   public void init() {  
      lazyModel = new LazyDataModel() {
       public List<Pais> load(int first, int pageSize, String sortField, boolean sortOrder, Map filters) {
           List<Pais> list = pDAO.getFindPais(first, first + pageSize);
           
           return list;
           }
       
       };
      lazyModel.setRowCount(pDAO.getTotalPaises());
   }
   public LazyDataModel<Pais> getLazyModel() {
       return lazyModel;
   }

   public void setpDAO(PaisDAO pDAO) {
       this.pDAO = pDAO;
   }
}





package com.ricardo.daos;
import com.ricardo.models.Pais;
import com.ricardo.models.Usuario;
import com.utilerias.HibernateUtil;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class PaisDAO{
public int getTotalPaises() {
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session sesion = sf.openSession();
        String hql = "select count(*) from Pais";
        Query query = sesion.createQuery(hql);
        return ((Number) query.uniqueResult()).intValue();
    }
    public List<Pais> getFindPais(final int firstRow, final int max){
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session sesion = sf.openSession();
        String hql = "from Pais";
        Query query = sesion.createQuery(hql);
        query.setFirstResult(firstRow);
        query.setMaxResults(max);
        List<Pais> lista = query.list();
        return lista;
    }}





package com.ricardo.models;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Pais {
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private int id;
   private String nombre;
   private String estado;
   @OneToMany(mappedBy="pais")
   private List<Ciudad> ciudad = new ArrayList<Ciudad>();  
   public List<Ciudad> getCiudad() {
       return ciudad;
   }
   public void setCiudad(List<Ciudad> ciudad) {
       this.ciudad = ciudad;
   }

   public Pais(int id, String nombre, String estado) {
       this.id = id;
       this.nombre = nombre;
       this.estado = estado;
   }

   
   public Pais(){
   
   }
   public int getId() {
       return id;
   }
   public void setId(int id) {
       this.id = id;
   }
   public String getNombre() {
       return nombre;
   }
   public void setNombre(String nombre) {
       this.nombre = nombre;
   }
   public String getEstado() {
       return estado;
   }

   public void setEstado(String estado) {
       this.estado = estado;
   }
   
}



Dejo detalle del error:
Grave:   Error Rendering View[/sistema/pais.xhtml]
java.lang.UnsupportedOperationException: Lazy loading is not implemented.

ivancea96

http://stackoverflow.com/questions/15385315/primefaces-lazyload-datatable-lazydatamodel

Como comentan ahí, hay 2 métodos load. Has implementado uno, prueba implementando también el otro.

visualfree

Gracias Ivan, testeare lo que me indicas , saludos.