Vistas de página en total

jueves, 11 de diciembre de 2014

Listar todo los usuarios con dataTable de primefaces

En este post comentare como poder listar todos los usuarios registrados en nuestra base de datos mediente Hibernate y mostrarlos en un dataTable de primefaces cabe mencionar que el framework primefaces ya tiene predefinidos sus diseños por eso a veces es muy dificil manipularlos de acuerdo a tu vista que deseas pero bueno hay que darles un buen uso jeje.

Ahora modificaremos nuevamente nuestro FrondEnd de usuario y debe quedar como el siguiente:

public interface FrondEndUser {
    public boolean registerUsers(Session session, Usuarios user) throws Exception;
    public List<Usuarios> listAllUsers(Session session) throws Exception;
    public Usuarios updateUsers(int id) throws Exception;
    public Usuarios deleteUsers(int id) throws Exception;
    public Usuarios getByEmail(Session session, String email) throws Exception;
}

Y por ende nuestro DAO se modificara y se le asignara el codigo necesario para consultar todos los regitros. Practicamente no explico el codigo porque lo eh documentado linea por linea espero se pueda entender.

public class usersDAO implements FrondEndUser{
    private Session session;
   
    @Override
    public boolean registerUsers(Session session, Usuarios user) throws Exception {
        session.save(user);//guardar los datos
        return true;
    }
    @Override
    public List<Usuarios> listAllUsers(Session session) throws Exception {
        //creamos la sentencia HQL ojo no es lo mismo que SQL en el post lo explicare mas a fondo
        String hql = "from Usuarios";
        //creamos el query donde lo inicializamos con el session que pasamos como parametro
        Query query = session.createQuery(hql);
        //recuperamos en una variable de tipo list que retorne una lista del pojo usuarios hacemos el casting y extraemos del query
        List<Usuarios> listUser = (List<Usuarios>) query.list();
        //retornamos la lista
        return listUser;
    }
    @Override
    public Usuarios updateUsers(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    @Override
    public Usuarios deleteUsers(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    @Override
    public Usuarios getByEmail(Session session, String email) throws Exception {
        //creamos la sentencia HQL
        String hql = "from Usuarios where email=:email";
        //creamos el query donde lo inicializamos con el session
        Query query = session.createQuery(hql);
        //agregamos al query el parametro de la consulta que se recibira desde el id que se le envie del Bean al DAO es la forma mas segura
        //para prevenir inyeccion sql
        query.setParameter("email", email);
        //pasamos a la consulta para ello instanciaremos el objeto Usuarios con el query dond solo obtendra un unico resultado
        Usuarios user = (Usuarios) query.uniqueResult();
        //retornamos
        return user;
    }
   
}


Modificaremos nuestro mangedBean para que pueda mostrar la consulta en la vista asi que creamos un nuevo metodo en el managedBean como el siguiente:

public List<Usuarios> getAll(){  
        /*inicializamos para asegurarnos*/
        session = null;
        transaction = null;
       
        try {
            /*instanciamos los objetos*/
             usersDAO daoUsers = new usersDAO();
             //abrimos sesion de conexcion
             session = HibernateUtil.getSessionFactory().openSession();
             //creamos la transaccion y la comenzamos
             transaction = session.beginTransaction();
             //pasamos la session a la lista
             listUser = daoUsers.listAllUsers(session);          
             transaction.commit();//cerrar transaccion
             //retornamos
             return listUser;
        } catch (Exception e) {
            //verificamos sino hay ya una transaccion ya definida
            if(transaction != null){
                //si lo hay haremos que todo se revierta en la BD y que como estaba antes de utilizar este metodo
                transaction.rollback();
            }
             FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error Fatal", "Contacte con su administrador "+e.getMessage()));
             return null;
        }finally{
            //verificamos sino hay ya una session ya definida
            if(session != null){
                //si lo hay cerramos la session
                session.close();
            }
        }
    }


Despues de esto generamos un nuevo FacesClient para que visualice los datos de la consulta y dicho esto debe quedar de la siguiente forma que lo definimos en nuestro Content del Template.

Explicare parte del codigo el tag de dataTable tiene varios parametros el id sirve para identificar nuestro dataTable si es que llegaremos a utilizar mas de uno en la aplicacion, el parametro var es la varible que servira como objeto para consultar los datos, el value sirve para decir de donde proviene la consulta en que Bean se esta realizando, paginator es para decir si queremos que contenga paginaciones para mostrar los resultados y el rows es para decir que en cada paginacion habra un tanto de consultas mostradas en este caso 5, para mostrar los datos en las columnas de la tabla utilizamos el tag column ponemos el titulo y con el tag de outputText de html mostramos el dato mediante el parametro value en el cual utilizamos la varible de tipo objeto "item" por asi decirlo para acceder a al pojo y mostrar los datos

       <ui:define name="content">
                <h2>Lista de usuarios</h2>
                <h:form id="formListAll">
                    <p:growl id="msjgral" showDetail="true" sticky="false" />
                    <p:dataTable id="tableListAll" var="item" value="#{managedBeanUser.all}" paginator="true" rows="5">
                        <f:facet name="header">
                            Lista de Usuarios
                        </f:facet>
                        <p:column headerText="Nombre">
                            <h:outputText value="#{item.nombres}"/>
                        </p:column>
                        <p:column headerText="Apellido Materno">
                            <h:outputText value="#{item.ap}"/>
                        </p:column>
                        <p:column headerText="Apellido Paterno">
                            <h:outputText value="#{item.am}"/>
                        </p:column>
                        <p:column headerText="E-mail">
                            <h:outputText value="#{item.email}"/>
                        </p:column>
                    </p:dataTable>              
                </h:form>
            </ui:define>


Y finalmente nuestra aplicacion queda asi:


                    



No hay comentarios:

Publicar un comentario