Vistas de página en total

miércoles, 10 de diciembre de 2014

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:




No hay comentarios:

Publicar un comentario