Vistas de página en total

miércoles, 10 de diciembre de 2014

Validacion si existe ya ese usuario en la BD con Hibernate, JSF

En este post haremos la validación si existe ya un usuario o no en este caso desde el email y otra validacion si es que el nombre de usuario no esta en uso en caso de que si que cambien de username mediante el Framework Hibernate de acuerdo como lo eh mencionado se debe tener ya conocimientos previos sobre java e Hibernate una vez comentado esto realizamos lo siguiente.

Primero que nada entenderemos que Hibernate es para la persistencia de los datos y que es muy diferentes sus sentencias ya que Hibernate contiene HQL y no SQL como hemos utilizado antes en esta caso el proyecto esta sobre una BD de MySQL, en HQL para hacer una consulta entenderemos que la tabla seria nuestro modelo que se creo con el pojo y sus campos serian las variables de nuestro modelo creado.

Una vez entendido esto realizaremos un cambio en nuestra interfaces o frondend de usuario y frondend login y debe quedar asi;

public interface FrondEndUser {
    public boolean registerUsers(Session session, Usuarios user) throws Exception;
    public List<Usuarios> listUsers() 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;
}

public interface FrondEndLogin {
    public boolean registerLogin(Session session, Login login) throws Exception;
    public Login updateLogin (int id) throws Exception;
    public Login deleteLogin (int id) throws Exception;
    public Login getByUserName(Session session, String name) throws Exception;
}



Despues en nuestro Dao implementaremos el metodo creado, ya que todo sera desde nuestro managedBean solo modifcamos unas cuantas lineas de codigo.

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> listUsers() throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    @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 ojo no es lo mismo que SQL en el post lo explicare mas a fondo
        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 donde solo obtendra un unico resultado
        Usuarios user = (Usuarios) query.uniqueResult();
        //retornamos
        return user;
    }

Dao login

public class loginDAO implements FrondEndLogin{
    private Session session;
   
    @Override
    public boolean registerLogin(Session session, Login login) throws Exception {
        session.save(login);//guardar los datos
        return true;
    }
    @Override
    public Login updateLogin(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    @Override
    public Login deleteLogin(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    @Override
    public Login getByUserName(Session session, String name) throws Exception {
        //creamos la sentencia HQL ojo no es lo mismo que SQL en el post lo explicare mas a fondo
        String hql = "from Login where user=:user";
        //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("user", name);
        //pasamos a la consulta para ello instanciaremos el objeto Usuarios con el query dond solo obtendra un unico resultado
        Login login = (Login) query.uniqueResult();
        //retornamos
        return login;
    }
   
}



Hecho esto modificaremos nuestro managedBean y quedaria como el siguiente:

@ManagedBean
@RequestScoped
public class ManagedBeanUser {
    private Usuarios user;
    private Login login;
    public List<Usuarios> listUser;
    private String confirPassword;
    private Session session;
    private Transaction transaction;
   
    public ManagedBeanUser() {
        user = new Usuarios();
        user.setIdusuarios(null);
        login = new Login();
        login.setIdlogin(null);
    }
   
    public void registerUser(){
        /*inicializamos para asegurarnos*/
        this.session = null;
        this.transaction = null;
     
        try {
             /*haremos la validacion de que el password sea el mismo a la hora de confirmarlo con una condicional podremos realizarlo*/
             if(!login.getPass().equals(confirPassword)){
                /*leer el contexto como msj y poder lanzarlo a la vista FacesMessage(FacesMessage.tipo de msj, titulo, msj)*/
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "Error de coincidencia de Password"));
                return;
                }
             loginDAO lDAO = new loginDAO();
             /*creamos el dao que utilizaremos*/
             usersDAO uDAO = new usersDAO();
             //abrimos sesion de conexcion
             session = HibernateUtil.getSessionFactory().openSession();
             //creamos la transaccion y la comenzamos
             transaction = session.beginTransaction();
             /*inicializamos la decision si esta o no esta registrado el ususario*/
             if(uDAO.getByEmail(session, user.getEmail()) != null){
                /*inidicaremos que el usuario ya existe en la base de datos*/
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error","El usuario ya esta registrado en la BD de INEE"));
                return;
              }else if(lDAO.getByUserName(session, login.getUser())!= null){
                 /*inidicaremos que el usuario ya existe en la base de datos*/
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error","El nombre de usuario ya esta en uso en la BD de INEE"));
                return;
             }
             /*se agregar a la variable pass de la clase login el pass encriptado*/
             login.setPass(Encrypting.encrypting(login.getPass()));
             /*instanciamos los objetos*/
             usersDAO daoUsers = new usersDAO();
             loginDAO daoLogin = new loginDAO();
             /*mandamos a llamar los metodos que utilizaremos*/
             daoUsers.registerUsers(session, user);
             daoLogin.registerLogin(session, login);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exito", "Datos insertados Exitosamente"));
             transaction.commit();//cerrar transaccion
             //esta forma limpiamos el formulario sin usar el js
             user = new Usuarios();
             user.setIdusuarios(null);
             login = new Login();
             login.setIdlogin(null);
        } 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()));
        }finally{
            //verificamos sino hay ya una session ya definida
            if(session != null){
                //si lo hay cerramos la session
                session.close();
            }
        }
     
    }
    public Login getLogin() {
        return login;
    }
    public void setLogin(Login login) {
        this.login = login;
    }
    public Usuarios getUser() {
        return user;
    }
    public void setUser(Usuarios user) {
        this.user = user;
    }
    public List<Usuarios> getListUser() {
        return listUser;
    }
    public void setListUser(List<Usuarios> listUser) {
        this.listUser = listUser;
    }
    public String getConfirPassword() {
        return confirPassword;
    }
    public void setConfirPassword(String confirPassword) {
        this.confirPassword = confirPassword;
    }  
}


Y nuestra salida en el sistema debe quedar asi:






No hay comentarios:

Publicar un comentario