Vistas de página en total

miércoles, 10 de diciembre de 2014

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:




No hay comentarios:

Publicar un comentario