Foro de elhacker.net

Programación => Java => Mensaje iniciado por: visualfree en 9 Octubre 2015, 15:32 pm



Título: PrimeFaces Lazy Loading Ayuda...gracias
Publicado por: visualfree en 9 Octubre 2015, 15:32 pm
Ayuda con datatable y lazy loading.
 
Código:

            <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>


Código:

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;
    }
}


Código:

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;
    }}



Código:
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.


Título: Re: PrimeFaces Lazy Loading Ayuda...gracias
Publicado por: ivancea96 en 10 Octubre 2015, 23:12 pm
http://stackoverflow.com/questions/15385315/primefaces-lazyload-datatable-lazydatamodel (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.


Título: Re: PrimeFaces Lazy Loading Ayuda...gracias
Publicado por: visualfree en 12 Octubre 2015, 05:25 am
Gracias Ivan, testeare lo que me indicas , saludos.