Vistas de página en total

miércoles, 10 de diciembre de 2014

Intregacion de Message, Growl y Tooltip de Primefaces a nuestro formulario

Es este post modificaremos nuestro formulario para que pueda verse profesionalmente asi que le haremos algunos cambios y modificaciones.

Generaremos un Message para que muestre la información de error a lado de nuestros campos de entrada, un Growl que mostrara el error y que con el parámetro sticky en falso para que al final de cierto tiempo desaparezca de nuestra pantalla y finalmente un Tooltip que nos puede servir de ayuda a la hora de no saber que información o como poner cierta información en un campo de texto y los parámetros que usamos son showEvent en true que se refiere a que se mostrara cuando usemos el focus y el hideEven en blur quiere decir que al quitar el focus desaparecerá y finalmente mostrare otra forma de limpiar el formulario desde nuestro managedBean y no usando el js que implementamos anteriormente.

El managedBean queda de la siguiente forma:

public void registerUser() throws Exception {
        /*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;
        }
        /*se agregar a la variable pass de la clase login el pass encriptado*/
        login.setPass(Encrypting.encrypting(login.getPass()));
        usersDAO daoUsers = new usersDAO();
        daoUsers.registerUsers(this.user);
        loginDAO daoLogin = new loginDAO();
        daoLogin.registerLogin(login);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exito", "Datos insertados Exitosamente"));
        //esta forma limpiamos el formulario sin usar el js
        user = new Usuarios();
        user.setIdusuarios(null);
        login = new Login();
        login.setIdlogin(null);
    }


Y el formulario con todo lo explicado en el principio de este post queda de la siguiente forma:

<h:form id="frmRegisterUser">
                    <p:growl id="msjgral" showDetail="true" sticky="false"/>
                    <h:panelGrid columns="3">
                        <p:outputLabel value="Nombre" for="txtName"/>
                        <p:inputText id="txtName" label="Nombre(s)" placeholder="Nombre(s)" value="#{managedBeanUser.getUser().nombres}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:message for="txtName"/>
                        <p:outputLabel value="Apellido Paterno" for="txtAp"/>
                        <p:inputText id="txtAp" label="Apellido Paterno" placeholder="Apellido Paterno" value="#{managedBeanUser.getUser().ap}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:message for="txtAp"/>
                        <p:outputLabel value="Apellido Materno" for="txtAm"/>
                        <p:inputText id="txtAm" label="Apellido Materno" placeholder="Apellido Materno" value="#{managedBeanUser.getUser().am}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:message for="txtAm"/>
                        <p:outputLabel value="Usuario" for="txtUser"/>
                        <p:inputText id="txtUser" label="Usuario" placeholder="Usuario" value="#{managedBeanUser.getLogin().user}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:message for="txtUser"/>
                        <p:outputLabel value="Contraseña" for="txtPass"/>
                        <p:password id="txtPass" label="Contraseña" placeholder="Contraseña" value="#{managedBeanUser.getLogin().pass}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:password>
                        <p:message for="txtPass"/>
                        <p:outputLabel value="Confirmar Contraseña" for="txtPassConfirm"/>
                        <p:password id="txtPassConfirm" label="Confirmar Contraseña" placeholder="Confirmar Contraseña" value="#{managedBeanUser.confirPassword}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:password>
                        <h:panelGroup></h:panelGroup>
                        <p:outputLabel value="E-Mail" for="txtEmail"/>
                        <p:inputText id="txtEmail" label="E-Mail" placeholder="Email del Usuario"  title="Ejem: username@dominio.com" value="#{managedBeanUser.getUser().email}" size="39">
                            <f:validator validatorId="ValidateEmptyFields"/>
                            <f:validator validatorId="ValidateEmail"/>
                        </p:inputText>
                        <h:panelGroup>
                            <p:tooltip for="txtEmail" showEvent="focus" hideEvent="blur"/>
                            <p:message for="txtEmail"/>
                        </h:panelGroup>
                        <p:outputLabel value="Direccion" for="txtDireccion"/>
                        <p:inputText id="txtDireccion" label="Direccion" placeholder="Direccion del Usuario" value="#{managedBeanUser.getUser().direccion}" size="49"/>
                        <h:panelGroup></h:panelGroup>
                        <p:outputLabel value="Fecha de nacimiento" for="txtCalendar"/>
                        <p:calendar id="txtCalendar" label="Fecha de nacimiento" title="Ejem: dd/mm/yyyy" showOn="button" placeholder="Fecha de Nacimiento" pattern="dd/mm/yyyy" required="true" value="#{managedBeanUser.getUser().fechaNacimiento}"/>
                        <p:message for="txtCalendar"/>
                        <h:outputLabel value="Sexo" for="radSex"/>
                        <p:selectOneRadio id="radSex" label="Sexo" value="#{managedBeanUser.getUser().sexo}">
                            <f:selectItem itemLabel="Hombre" itemValue="H"/>
                            <f:selectItem itemLabel="Mujer" itemValue="M"/>
                        </p:selectOneRadio>
                        <h:panelGroup></h:panelGroup>
                        <h:panelGroup></h:panelGroup>
                        <p:commandButton id="btn1" value="Registrar" actionListener="#{managedBeanUser.registerUser()}" update="frmRegisterUser"/>
                    </h:panelGrid>
                </h:form>

Aqui la muestra de los message y el growl en error:



Aqui la muestra del Tooltip:



Y final mente el growl a la hora de insertar y como el formulario queda vació:



Validar Email y Fecha de Nacimiento

Ahora para este proyecto tengo que implementar un validador de email ya que un email contiene un nombre de usuario este puede ser alfanumerico, un arroba, y un dominio.com de acuerdo como haremos esta validacion. Pues buen hay expreciones regulares que ya podemos encontrar en internet solo es cuestion de implementarlo en nuestro sistema como en este caso para la validacion.

Para ello creamos una nueva clase en nuestro mismo paquete donde se encuentra en validador anterior de acuerdo el codigo es el siguiente:

//implementamos una anotacion de faces validator que validara en tiempo de ejecucion
@FacesValidator("ValidateEmail")
//la clase la implementaremos de Validator, despues de ello implementar todos los metodos abstractos
public class validateEmail implements Validator{
    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
         String label;
        //es para los campos de entrada que vamos a recuperar y lo convertimos en comonent para validar
        HtmlInputText htmlIT = (HtmlInputText) component;
        //condicionamos si el label es null o si existe pero es null hara algo sino hara otra funcion
        if(htmlIT.getLabel() == null || htmlIT.getLabel().trim().equals("")){
            //sirve para identificar los tags x su id en caso de q no tengan label y si no tienen id jsf se encarga de poner por defecto
            label = htmlIT.getId();
        }else{
            //obtenemos todos los label
            label = htmlIT.getLabel();
        }
        //como sabemos un email debe tener un nombre ya sea alfanumerico, arroba, un dominio.com de acuerdo utilizaremos el
        //pattern para las expreciones regulares
        Pattern pattern = Pattern.compile("([a-zA-Z0-9\\.\\/-_]+\\@[a-zA-Z-]+\\.[a-zA-Z]+)*");
        //matcher es nn motor que realiza operaciones de los partidos en una secuencia de caracteres mediante la interpretación de un Patrón.
        Matcher matcher = pattern.matcher((CharSequence) value);
        //ahora verificaremos sino cumple con la exprecion regular para el email mande una excepcion
        if(!matcher.matches()){
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", label+": No de un Email valido"));
        }
    }



Tratare de explicar esta parte del código ([a-zA-Z0-9\\.\\/-_]+\\@[a-zA-Z-]+\\.[a-zA-Z]+)* simplemente es esta parte [a-zA-Z0-9\\.\\/-_] hacemos el nombre de usuario que contendrá letras minúsculas y mayúsculas también como números y los signos especiales que se utilizan que son - y _ de acuerdo en esta otra parte del cogido +\\@[a-zA-Z-]+ decimos que después del nombre de usuario forzosamente deberá ir un @ y seguido de un dominio que solo es carácter que puede contener minúsculas y mayúsculas y final mente \\.[a-zA-Z]+)* aquí decimos que después del dominio debe ir forzosamente un punto (.) y parte final del dominio y quedaría así: davhorp@gmail.com.

Final mente agregamos una linea mas a nuestro formulario para que ademas de validar el campo vació en email valide también que sea un email correcto ok y ademas validaremos la fecha de nacimiento solo queremos una expresión como la siguiente dd/mm/yyyy en el campo de fecha de nacimiento y quedaría así:

<h:form id="frmRegisterUser">
                    <p:messages id="msjgral" showDetail="true" autoUpdate="true" closable="true"/>
                    <h:panelGrid columns="2">
                        <p:outputLabel value="Nombre" for="txtName"/>
                        <p:inputText id="txtName" label="Nombre(s)" placeholder="Nombre(s)" value="#{managedBeanUser.getUser().nombres}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Apellido Paterno" for="txtAp"/>
                        <p:inputText id="txtAp" label="Apellido Paterno" placeholder="Apellido Paterno" value="#{managedBeanUser.getUser().ap}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Apellido Materno" for="txtAm"/>
                        <p:inputText id="txtAm" label="Apellido Materno" placeholder="Apellido Materno" value="#{managedBeanUser.getUser().am}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Usuario" for="txtUser"/>
                        <p:inputText id="txtUser" label="Usuario" placeholder="Usuario" value="#{managedBeanUser.getLogin().user}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Contraseña" for="txtPass"/>
                        <p:password id="txtPass" label="Contraseña" placeholder="Contraseña" value="#{managedBeanUser.getLogin().pass}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:password>
                        <p:outputLabel value="Confirmar Contraseña" for="txtPassConfirm"/>
                        <p:password id="txtPassConfirm" label="Confirmar Contraseña" placeholder="Confirmar Contraseña" value="#{managedBeanUser.confirPassword}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:password>
                        <p:outputLabel value="E-Mail" for="txtEmail"/>
                        <p:inputText id="txtEmail" label="E-Mail" placeholder="Email del Usuario" value="#{managedBeanUser.getUser().email}" size="39">
                            <f:validator validatorId="ValidateEmptyFields"/>
                            <f:validator validatorId="ValidateEmail"/>
                        </p:inputText>
                        <p:outputLabel value="Direccion" for="txtDireccion"/>
                        <p:inputText id="txtDireccion" label="Direccion" placeholder="Direccion del Usuario" value="#{managedBeanUser.getUser().direccion}" size="49"/>
                        <p:outputLabel value="Fecha de nacimiento" for="txtCalendar"/>
                        <p:calendar id="txtCalendar" label="Fecha de nacimiento" showOn="button" placeholder="Fecha de Nacimiento" pattern="dd/mm/yyyy" required="true" value="#{managedBeanUser.getUser().fechaNacimiento}"/>
                        <h:outputText value="Sexo"/>
                        <p:selectOneRadio id="radSex" label="Sexo" value="#{managedBeanUser.getUser().sexo}">
                            <f:selectItem itemLabel="Hombre" itemValue="H"/>
                            <f:selectItem itemLabel="Mujer" itemValue="M"/>
                        </p:selectOneRadio>
                        <p:commandButton id="btn1" value="Registrar" action="#{managedBeanUser.registerUser()}"/>
                    </h:panelGrid>
                </h:form>


Lo que hace la etiqueta placehorder es poner una leyenda sobre el text field como se se vera en la imagen uno y en la imagen 2 de como la aplicación deberá quedar:




Validar campos vacios con primefaces, jsf

En la actualidad hay aplicaciones donde uno debe de registrarse pero en la mayoria hay fallas porque aun sin poner ningun valor o en un campo donde solo es numerico pasa que acepta caracteres en este pequeño ejemplo hare la validacion para que no deje un campo vacio a no ser innesaria cierta informacion,  para ello haremos una clase que contendra esta validacion.

//implementamos una anotacion de faces validator que validara en tiempo de ejecucion y le damos un id "ValidateEmptyFields"
@FacesValidator("ValidateEmptyFields")
//la clase la implementaremos de Validator, despues de ello implementar todos los metodos abstractos
public class validateEmptyFields implements Validator{
    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String label;
        //es para los campos de entrada que vamos a recuperar y lo convertimos en comonent para validar
        HtmlInputText htmlIT = (HtmlInputText) component;
        //condicionamos si el label es null o si existe pero es null hara algo sino hara otra funcion
        if(htmlIT.getLabel() == null || htmlIT.getLabel().trim().equals("")){
            //sirve para identificar los tags x su id en caso de q no tengan label y si no tienen id jsf se encarga de poner por defecto
            label = htmlIT.getId();
        }else{
            //obtenemos todos los label
            label = htmlIT.getLabel();
        }
       
        //ahora validaremos con una condicional el Object llamado value, trim sirve para quitar los espacios y manda la excepcion
        if(value.toString().trim().equals("")){
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", label+": Campo Obligatorio"));
        }
    }

Una vez que tengamos la clase volveremos a modificar nuestro formulario que ya teniamos hecho a cada <p:inputText> que consideremos que es muy importante pondremos la validacion de campos de acuerdo como se muestra en el ejemplo:

<h:form id="frmRegisterUser">
                    <p:messages id="msjgral" showDetail="true" autoUpdate="true" closable="true"/>
                    <h:panelGrid columns="2">
                        <p:outputLabel value="Nombre" for="txtName"/>
                        <p:inputText id="txtName" label="Nombre" value="#{managedBeanUser.getUser().nombres}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Apellido Paterno" for="txtAp"/>
                        <p:inputText id="txtAp" label="Apellido Paterno" value="#{managedBeanUser.getUser().ap}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Apellido Materno" for="txtAm"/>
                        <p:inputText id="txtAm" label="Apellido Materno" value="#{managedBeanUser.getUser().am}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Usuario" for="txtUser"/>
                        <p:inputText id="txtUser" label="Usuario" value="#{managedBeanUser.getLogin().user}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Contraseña" for="txtPass"/>
                        <p:password id="txtPass" label="Contraseña" value="#{managedBeanUser.getLogin().pass}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:password>
                        <p:outputLabel value="Confirmar Contraseña" for="txtPassConfirm"/>
                        <p:password id="txtPassConfirm" label="Confirmar Contraseña" value="#{managedBeanUser.confirPassword}">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:password>
                        <p:outputLabel value="E-Mail" for="txtEmail"/>
                        <p:inputText id="txtEmail" label="E-Mail" value="#{managedBeanUser.getUser().email}" size="39">
                            <f:validator validatorId="ValidateEmptyFields"/>
                        </p:inputText>
                        <p:outputLabel value="Direccion" for="txtDireccion"/>
                        <p:inputText id="txtDireccion" label="Direccion" value="#{managedBeanUser.getUser().direccion}" size="49"/>
                        <p:outputLabel value="Fecha de nacimiento" for="txtCalendar"/>
                        <p:calendar id="txtCalendar" label="Fecha de nacimiento" value="#{managedBeanUser.getUser().fechaNacimiento}"/>
                        <h:outputText value="Sexo"/>
                        <p:selectOneRadio id="radSex" label="Sexo" value="#{managedBeanUser.getUser().sexo}">
                            <f:selectItem itemLabel="Hombre" itemValue="H"/>
                            <f:selectItem itemLabel="Mujer" itemValue="M"/>
                        </p:selectOneRadio>
                        <p:commandButton id="btn1" value="Registrar" action="#{managedBeanUser.registerUser()}"/>
                    </h:panelGrid>
                </h:form>


Pondremos la etiqueta f:validator con el parametro validatorId que es el nombre que le pusimos en la clase como id ValidateEmptyFields y en ejecucion a la hora de validar saldra un mensaje como el siguiente:




martes, 9 de diciembre de 2014

Script para limpiar el formulario después de hacer una insercion

A la hora de hacer nuestro registro nuestro formulario debe quedar completamente vacio como toque profesional y para ello generamos un script como el siguiente:

function cleanForm(idform){
    /*estamos leyendo el documento mediante su id de form y el reset es para resetear nuestro form*/
    document.getElementById(idform).reset();
}


y posteriormente en nuestro managedBean agregamos una linea que servira para ejecutar nuestro script a la hora de hacer una insercion correcta quedaria asi:

public String registerUser() throws Exception {
        /*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 "/User/RegisterUser";
        }
        /*se agregar a la variable pass de la clase login el pass encriptado*/
        login.setPass(Encrypting.encrypting(login.getPass()));
        usersDAO daoUsers = new usersDAO();
        daoUsers.registerUsers(this.user);
        loginDAO daoLogin = new loginDAO();
        daoLogin.registerLogin(login);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exito", "Datos insertados Exitosamente"));
        /*ejecutamos el java script*/
        RequestContext.getCurrentInstance().execute("cleanForm('frmRegisterUser')");
        return "/User/RegisterUser";
    }

debemos tomar en cuenta que nuestro RequetsContext debe ser importado de org.primefaces.context.RequestContext, despues mandamos a llamar el script desde nuestro template  asi:

<h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <h:outputStylesheet name="./css/default.css"/>
        <h:outputStylesheet name="./css/cssLayout.css"/>
        <h:outputScript library="js" name="jsControllers.js"/>
    </h:head>

y al final la aplicacion debe quedar asi despues de insertar correctamente:



Mensajes de Alerta con primefaces

Este este post veremos como mandar los mensajes ya sea de alerta, de informacion o error dependiendo el caso o uso que se le vaya a dar, en este ejemplo tomare en cuenta el de un registro donde se validaran los passwords que sean los mismos.

primefaces tiene un tag que es p:messages en el parametro showDetails es para que se muestren los detalles, closable es para que podamos cerrar el mensaje   

<p:messages id="msjgral" showDetail="true" autoUpdate="true" closable="true"/> asi que nuestro formulario quedaria asi:

<h:form id="frmRegisterUser">
                    <p:messages id="msjgral" showDetail="true" autoUpdate="true" closable="true"/>
                    <h:panelGrid columns="2">
                        <h:outputText value="Nombre"/>
                        <p:inputText id="txtName" value="#{managedBeanUser.getUser().nombres}"/>
                        <h:outputText value="Apellido Paterno"/>
                        <p:inputText id="txtAp" value="#{managedBeanUser.getUser().ap}"/>
                        <h:outputText value="Apellido Materno" />
                        <p:inputText id="txtAm" value="#{managedBeanUser.getUser().am}"/>
                        <h:outputText value="Usuario" />
                        <p:inputText id="txtUser" value="#{managedBeanUser.getLogin().user}"/>
                        <h:outputText value="Contraseña" />
                        <p:password id="txtPass" value="#{managedBeanUser.getLogin().pass}"/>
                        <h:outputText value="Confirmar Contraseña" />
                        <p:password id="txtPassConfirm" value="#{managedBeanUser.confirPassword}"/>
                        <h:outputText value="E-Mail"/>
                        <p:inputText id="txtEmail" value="#{managedBeanUser.getUser().email}" size="39"/>
                        <h:outputText value="Direccion"/>
                        <p:inputText id="txtDireccion" value="#{managedBeanUser.getUser().direccion}" size="49"/>
                        <h:outputText value="Fecha de nacimiento"/>
                        <p:calendar value="#{managedBeanUser.getUser().fechaNacimiento}"/>
                        <h:outputText value="Sexo"/>
                        <p:selectOneRadio id="radSex" value="#{managedBeanUser.getUser().sexo}">
                            <f:selectItem itemLabel="Hombre" itemValue="H"/>
                            <f:selectItem itemLabel="Mujer" itemValue="M"/>
                        </p:selectOneRadio>
                        <p:commandButton id="btn1" value="Registrar" action="#{managedBeanUser.registerUser()}"/>
                    </h:panelGrid>
                </h:form>




Ahora modificaremos de nuevo nuestro managedBean y quedaria de la siguiente forma:

public String registerUser() throws Exception {
        /*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 "/User/RegisterUser";
        }
        /*se agregar a la variable pass de la clase login el pass encriptado*/
        login.setPass(Encrypting.encrypting(login.getPass()));
        usersDAO daoUsers = new usersDAO();
        daoUsers.registerUsers(this.user);
        loginDAO daoLogin = new loginDAO();
        daoLogin.registerLogin(login);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exito", "Datos insertados Exitosamente"));
        return "/User/RegisterUser";
    }


con esto obtendremos 2 tipos de mensajes uno como error y otro como informacion o exito



Encriptacion de datos

En las aplicaciones es habitual que haya todo tipo de sistemas en las que se genere u obtenga información personal del cliente o empleados, un ejemplo en un login se necesita del usuario y del password del usuario entonces se en-cripta el password en este caso para que se proteja la informacion para ello se realizara mediante una clase de java que se encarga de eso que es "SHA-512"

Se crea la clase para la encriptacion:

public class Encrypting {
    /*metodo que convertira una cadena en bytes*/
    public static String encrypting(String pass){
        /*clase que se encarga de la conversion al momento de recuperarlo y lo almacena en la variable sb*/
        StringBuilder sb = new StringBuilder();
     
        try{
            /*clase que se encarga de obtener la instancia de SHA512 y se llamara md*/
            MessageDigest md=MessageDigest.getInstance("SHA-512");
            /*md se encarga de leer los bytes de la variable pass*/
            md.update(pass.getBytes());
            /*creamos un array de bytes donde se almacenara el pass convertido*/
            byte[] mb=md.digest();
            /*se inicializa un ciclo for que se encargara de ir recorriendo hasta  terminar de encriptar el pass*/
            for(int i = 0; i < mb.length; i++){
                sb.append(Integer.toString((mb[i] & 0xff) + 0x100, 16).substring(1));
            }
            /*caturamos cualquier excepcion que llegue a suceder*/
        }catch(NoSuchAlgorithmException ex){
        }
        /*retornamos la encriptacion de bytes y la convertimos en cadena*/
        return sb.toString();
    }
}


una vez creada modificamos nuestro managedBean que habiamos creado en el post anterior en el metodo registerUser y quedaría de la siguiente forma:

public String registerUser() throws Exception {
        /*se agregar a la variable pass de la clase login el pass encriptado*/
        login.setPass(Encrypting.encrypting(login.getPass()));
        usersDAO daoUsers = new usersDAO();
        daoUsers.registerUsers(this.user);
        loginDAO daoLogin = new loginDAO();
        daoLogin.registerLogin(login);
        return "User/RegisterUser";
    }


Despues de correr la aplicacion y registrar los datos veremos en el campo pass de nuestra base de datos se almacena una cadena enorme y esa es la cadena de bytes (ecriptacion).



Insercion de Datos a 2 tablas en MySQL con Hibernate, JFS y primefaces

Se necesita tener conocimientos previos de java con frameworks jsf e hibernate y nocion de primefaces. Una vez creado el Formulario en JFS un ejemplo:



Nota: en el atributo value se pondra el managedBean para usar en el formulario el cual contiene los datos de los modelos  value="#{nombreBean.metodo().variable} en el atributo action se pondra el metodo que hace la insercion atravez de Hibernate action="#{nombreBean.metodo()}
en el hibernate.cfg.xml se pondra las propiedades para la conexion con la base de datos MySQL y el mapeo de los modelos se genera automaticamente despues de crear los pojos ejemplo:

lo siguiente es hacer la reingeniera inversa para hacer el filtro de las tablas con la aplicacion web y quedaria un codigo como el siguiente:

<hibernate-reverse-engineering>  <schema-selection match-catalog="inee"/>  <table-filter match-name="perfil"/>  <table-filter match-name="usuarios"/>  <table-filter match-name="login"/>  <table-filter match-name="recursos"/></hibernate-reverse-engineering>


Luego creamos los pojos solo se podran crear si ya tenemos la reingenieria inversa creada en nuestro proyecto debe quedar asi:

Se crean las clases o modelos y los archivos xml por parte de Hibernate ahora creamos los DAO necesarios en este caso 2 porque insertaremos en 2 tablas de MySQL
Dao User

public class usersDAO implements FrondEndUser{    private Session session;       @Override    public boolean registerUsers(Usuarios user) throws Exception {        //iniciar la session de conexion con hibernate y abrimos la sesion de conexion a la bd
        session = HibernateUtil.getSessionFactory().openSession();        //creamos la transaccion y la comenzamos        Transaction transaction = session.beginTransaction();        session.save(user);//guardar los datos        transaction.commit();//cerrar transaccion         session.close();//cierra la sesion
        return true;    } }


Dao Login

public class loginDAO implements FrondEndLogin{    private Session session;       @Override    public boolean registerLogin(Login login) throws Exception {         //iniciar la session de conexion con hibernate y abrimos la sesion de conexion a la bd
        session = HibernateUtil.getSessionFactory().openSession();        //creamos la transaccion y la comenzamos        Transaction transaction = session.beginTransaction();        session.save(login);//guardar los datos        transaction.commit();//cerrar transaccion         session.close();//cierra la sesion        return true;    }}


Estas 2 clases debes ser implementadas por sus interfaces o frondend

frondend user

public interface FrondEndUser {    public boolean registerUsers(Usuarios user) throws Exception;    public List<Usuarios> listUsers() throws Exception;    public Usuarios updateUsers(int id) throws Exception;    public Usuarios deleteUsers(int id) throws Exception;}

frondend login

public interface FrondEndLogin {    public boolean registerLogin(Login login) throws Exception;    public Login updateLogin (int id) throws Exception;    public Login deleteLogin (int id) throws Exception;}

crearemos el managedBean para hacer el control algo asi como un servlet en el sentido de controlador ejemplo:

@ManagedBean@RequestScopedpublic class ManagedBeanUser {    private Usuarios user;    private Login login;    public List<Usuarios> listUser;//    private String confirPassword;       public ManagedBeanUser() {        user = new Usuarios();        user.setIdusuarios(null);        login = new Login();        login.setIdlogin(null);    }       public String registerUser() throws Exception {        usersDAO daoUsers = new usersDAO();        daoUsers.registerUsers(this.user);        loginDAO daoLogin = new loginDAO();        daoLogin.registerLogin(login);        return "User/RegisterUser";    }    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;
    }}

y probamos en la salida de consola debe  decir esto:

Información:   Hibernate: insert into inee.usuarios (nombres, ap, am, email, direccion, fechaNacimiento, sexo) values (?, ?, ?, ?, ?, ?, ?)Información:   Hibernate: insert into inee.login (user, pass) values (?, ?)


quiere decir que la insercion se realizo exitosamente :) :D saludos...