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