Vistas de página en total

miércoles, 10 de diciembre de 2014

Dando un mejor estilo a nuestro formulario

Esta parte del blog solo me enfocare algo rapido a esto de css3 para el diseño de la vista ojo hay que tener entendimiento de las hojas de estilo de acuerdo.

En la practica tengo un template prefabricado por jsf y esto al igual generar sus hojas de estilos asi que ahi es donde vamos a modificar solo en este caso dare el puro codigo y la muestra

El codigo css es el siguiente:

#top {
    top: 0px;
    left: 0px;
    height: 100px;
    position: fixed;
    background-color: #036fab;
    width:100%;
    z-index: 1000;
    box-shadow: 0px 2px 2px rgba(0,0,0,0.7);
}


.center_content {
    box-shadow: 0px 0px 2px black;
    position: relative;
    background-color: white;
    margin-top: 110px;
    padding: 5px;
}
#label1{
    color: #036fab;
    float: right;
    top: 10px;
    text-decoration: none;
    vertical-align: bottom;
    position: absolute;
    right: 30px;
    cursor: pointer;
}
#logo{
 position: fixed;//estara en posicion estatica  
 background:#646469;
 width:100%;
 max-height: 200em;
 height: 100px;
 top: 0px;
 left: 0px;
 z-index: 1000;
}

h3{
    color: silver;
    z-index: 1000;
}
#ineeimage{
    position: absolute;
    left: 30px;
    float: left;
    top: -10px;
    vertical-align: bottom;
    display: block;
}
label1{
    position: absolute;
    left: 30px;
}
output{
    font-family: monospace;
}

En el template original agrego esto:

<div id="top" class="top">
            <h3>Sistema de Banco de Imagenes INEE</h3>
            <h:form>  
            <p:megaMenu>
                <p:menuitem value="Inicio" outcome="/home" icon="ui-icon-check"/>
                <p:submenu label="Usuario" icon="ui-icon-gear">
                    <p:column>
                        <p:submenu label="CRUD">
                            <p:menuitem value="Registrar" outcome="/User/RegisterUser" icon="ui-icon-pencil"/>
                            <p:menuitem value="Ver y Editar" url="#" icon="ui-icon-document"/>
                        </p:submenu>
                    </p:column>
                </p:submenu>
            </p:megaMenu>
            </h:form>  
            <ui:insert name="top">Top</ui:insert>
        </div>

Y al final el formulario es el siguiente:



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:






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: