| Registrar a un usuario en un sitio Web con Visual Web JSF |
| Paso 6: Operativa |
Vista - RegistroUsuario.jsp - Crear un validador personalizado
En este paso vamos a comprobar que el correo electrónico introducido en el campo de texto E-Mail es correcto.
Para ello nos vamos a crear nuestro propio validador en el backing bean o page bean RegistroUsuario.java.
Cuando introduzcamos un correo electrónico que no sea correcto aparecerá el siguiente mensaje.

Vamos a seguir las siguiente pautas para crear nuestro validador personalizado.
1. Editar el Resource Bundle
En el fichero literales/ErroresBundle.properties añadimos la llave
javax.faces.component.UIInput.REQUIRED=Campo obligatorio
error_email_incorrecto=E-mail incorrecto
|
2. Declarar el Message Bundle en el fichero de configuración de JSF
Comprobamos que el fichero Message Bundle literales.ErroresBundle está declarado en el fichero de configuración de JSF faces-config.xml
<application>
<message-bundle>literales.ErroresBundle</message-bundle>
</application> |
3. Escribir un método de validación personalizado
Para crea un método de validación en el backing bean asociado a la página JSP tenemos que hacer clic con el botón derecho del ratón sobre el campo de texto E-Mail y seleccionar Edit Event Handler | validate=>email_validate()

Como podemos observar, el asistente de NetBeans ha creado el método email_validate(...).

y también ha ampliado la página JSP RegistroUsuario.jsp.
<?xml version="1.0" encoding="UTF-8"?>
<jsp:root version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:webuijsf="http://www.sun.com/webui/webuijsf"
>
<jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
<f:view>
<f:loadBundle basename="paqregusuariovwjsf.Bundle" var="mensajes"/>
<webuijsf:page id="page1">
<webuijsf:html id="html1">
<webuijsf:head id="head1" title="Registro Usuaro">
<webuijsf:link id="link1" url="/resources/stylesheet.css"/>
</webuijsf:head>
<webuijsf:body id="body1" style="-rave-layout: grid">
<webuijsf:form id="form1">
<webuijsf:staticText id="stxRegistroUsuario"
style="font-size: 24px; font-weight: bold;
left: 210px; top: 10px; position: absolute" text="#{mensajes.literal_registroUsurario}"
/>
<webuijsf:staticText id="stxCamposRequeridos"
style="font-size: 10px;
left: 280px; top: 40px; position: absolute" text="#{mensajes.literal_camposRequeridos}"
/>
<webuijsf:label for="nombre"
id="lb1nombre"
style="left: 28px; top: 80px; position: absolute" text="#{mensajes.literal_nombre}"
/>
<webuijsf:textField required="true"
id="nombre"
style="left: 28px; top: 100px; position: absolute"
/>
<webuijsf:message for="nombre" id="msgNombre"
showDetail="false" showSummary="true"
style="left: 28px; top: 123px; position: absolute"
/>
<webuijsf:image id="imgAsterisco" style="left: 265px; top: 39px; position: absolute" url="/imagenes/asterisco.gif"
/>
<webuijsf:label for="email" id="lblEmail"
style="left: 28px; top: 140px; position: absolute" text="#{mensajes.literal_email}"
/>
<webuijsf:textField columns="46" id="email" required="true"
style="left: 28px; top: 160px; position: absolute" validatorExpression="#{RegistroUsuario.email_validate}"
/>
<webuijsf:message for="email" id="msgEmail" showDetail="false" showSummary="true" style="left: 28px; top: 183px; position: absolute"
/>
<webuijsf:panelGroup id="pnlgEnviar"
style="left: 268px; top: 216px; position: absolute">
<webuijsf:button id="btnEnviar" text="#{mensajes.literal_enviar}"/>
</webuijsf:panelGroup>
</webuijsf:form>
</webuijsf:body>
</webuijsf:html>
</webuijsf:page>
</f:view>
</jsp:root> |
- <webuijsf:textField columns="46" id="email" required="true"
style="left: 28px; top: 160px; position: absolute" validatorExpression="#{RegistroUsuario.email_validate}"
/>
- el aributo validatorExpression contiene una expresión de valor que invoca al método email_validate(...) del backing bean de la página JSP
Ahora vamos a implementar el método email_validate(...)
package paqregusuariovwjsf;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import java.util.ResourceBundle;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
public class RegistroUsuario extends AbstractPageBean {
.
.
public void email_validate(FacesContext fc, UIComponent uic, Object o) {
String strValue = String.valueOf(o);
if (!strValue.matches(".+@.+\\.[a-z]+")) {
ResourceBundle resourceBundle = ResourceBundle.getBundle(
"literales.ErroresBundle",
fc.getViewRoot().getLocale());
String strTextoError = resourceBundle.getString("error_email_incorrecto");
throw new ValidatorException(new FacesMessage(strTextoError));
}
}
.
.
}
|
- if (!strValue.matches(".+@.+\\.[a-z]+")) {
- ResourceBundle resourceBundle = ResourceBundle.getBundle(
"literales.ErroresBundle",
fc.getViewRoot().getLocale());
- con el primer argumento indicamos el nombre del Resource Bundle
- y con el segundo argumento indicamos el locale o internacionalización (I18N) que en ese momento la aplicación Web está utilizando
- String strTextoError = resourceBundle.getString("error_email_incorrecto");
- obtenemos el literal E-Mail incorrecto si estamos utilizando el default locale
- obtenemos el literal E-Mail incorrect si estamos utilizando el locale en - inglés
- throw new ValidatorException(new FacesMessage(strTextoError));
- la Clase FacesMessage() representa a un mensaje de validación asociado a un componente JSF
4. Ejecutar la aplicación Web en inglés
Después de realizar las traducciones pertinenentes este es el mensaje de validación personalizado que recibe el usuario cuando está interacutando con el servidor en lengua inglesa