Академический Документы
Профессиональный Документы
Культура Документы
Existen varios mtodos para agregar validaciones a un control, pueden aparecer todos en un
mismo control, no son incompatibles entre ellos.
Existen propiedades para etiquetas de control que se cargan con true o false para adaptar
comportamiento del control al hacer un submit (envo del formulario).
Se puede implementar mtodos en el bean de respaldo (backbean) o de otro que exista en el
alcance de la pgina que validen datos introducidos en el control mediante expresin EL de JSF.
Llamar a un mtodo validate del objeto que implemente el control (binding).
Con etiquetas para asignar un cierto validador a un control, etiqueta hija del control, permite ms
de una, son creados como clases independientes.
PROCESO
Se enva pgina, se invoca validadores asociados a un control, si todos los validadores del control
son vlidos, el control es vlido, si falla la validacin, los datos no se cargan en el modelo de datos
(backbean), en esta fase de validacin se genera respuesta a usuario, cada mtodo de validacin
DEBE CREAR UNA INSTANCIA DE FacesMessage donde mostrar mensaje. El FacesMessage se
rodea de una EXCEPCIN ValidatorException que ser lanzada por el mtodo. Se muestra de
forma apropiada los mensajes de error.
USANDO VALIDADORES EN JSF
Propiedad required: true o false para exigir valor diferente de vaco. Si no se indica el valor
entonces no se ejecuta el resto de procesos de validacin que tenga el control.
<h:inputText id=valor required=true />
VALIDADORES BSICOS: Se declaran como hijos de la etiqueta que defina el control.
MTODOS DE VALIDACIN: Indicando en propiedad validator del control, el mtodo que se
invocar para validar, este puede ser del propio bean de respaldo o de otro bean que est a su
alcance. til para validaciones especficas a nivel de aplicacin.
<h:inputText id=emailInput validator=#{registrationBean.validateEmail}
value=#{registrationBean.email}>
VALIDADORES A MEDIDA CREADOS PARA VALIDACIONES ESPECFICAS: Se declaran dentro de
etiqueta del control. Ejemplo: Hacer un validador con identificador Email que compruebe que el
control contiene una direccin de correo electrnico correcta.
<h:inputTtext>
TAG JSF
validateDoubleRange
ATRIBUTOS
minimum, maximum
LengthValidator
validateLength
minimum, maximum
LongRangeValidator
validateLongRange
minimum, maximum
DESCRIPCIN
Valida que valor del
componente
sea
mayor que un mnimo
y menor que un
mximo. Este valor
debe ser de tipo float
Valida que longitud
del
valor
del
componente
est
entre un valor mnimo
y un valor mximo
Valida que el valor del
componente
sea
mayor que un mnimo
y menor que un
mximo. Este valor
debe ser tipo entero
error asociado al componente responsable, mostrndose en la pgina JSF por etiquetas h:message
o h:messages.
VALIDANDO LMITES PARA UN VALOR NUMRICO: Comprueba el rango de un dato introducido.
<h:inputText value=#{regalo.cantidad}>
<f:validateLongRange mnimum=10 mximum=10000 />
</h:inputText>
Validador verifica que valor dado sea mayor igual a 10 y menor o igual a 10000
CHEQUEANDO VALORES REQUERIDOS
Validador no se anida dentro de etiqueta. Sino se usa atributo required=true
<h:inputText value=#{informe.fecha} required=true />
Todas las etiquetas JSF de entrada, soportan atributo required. Se puede combinar un atributo
required con un validador anidado:
<h:inputText value=#{informe.telefono} required=true>
<f:validateLength mnimum=9 />
</h:inputText>
Comunicacin de errores en la validacin
JSF, en su estndar, define la existencia de un sistema centralizado de gestin de mensajes, una cola,
en donde se irn depositando los mensajes que se generen durante las diferentes fases del ciclo de
vida JSF. Este sistema de mensajes admite diferentes niveles de gravedad en los mensajes, de menor
a mayor: SEVERITY_INFO, SEVERITY_WARN, SEVERITY_ERROR y SEVERITY_FATAL. Estos niveles son
fijados por el cdigo subyacente, bien de la implementacin JSF, bien de la propia aplicacin, en el
momento de creacin del mensaje, mediante los mtodos de la clase FacesMessage. Un mensaje
contiene, adems de su marca de gravedad, un resumen y un detalle, datos estos que se pueden
tanto indicar en el momento de la creacin del mensaje (segn el constructor que se use) o bien
mediante los apropiados get/set.
La cola de mensajes es accesible a travs de los siguientes mtodos del objeto FacesContext
correspondiente:
<h:message>: Se asocia a un control determinado mediante su propiedad for, donde se debe poner el
identificador del control. Este control admite clases y estilos CSS especficos para cada nivel de
gravedad de los mensajes que tenga que mostrar. Mostrar exclusivamente los mensajes de error que
haya generado el proceso de los datos del control al que est asociado.
<h:messages>: Panel para mensajes globales. Aqu se mostrarn tanto los mensajes de proceso de
cada control como los mensajes generales que la aplicacin haya depositado en la cola de mensajes.
Tambin acepta diferentes estilos CSS para modificar su aspecto segn la gravedad de los mensajes
que se muestren, da la posibilidad de mostrar exclusivamente los mensajes globales (propiedad
globalOnly) y definir la disposicin de los mensajes (propiedad layout, que puede ser table o list).
...
throw new ValidatorException(new FacesMessage(ResumenDelMensaje));
...
Incluir una constante en su implementacin para identificacin en el sistema JSF. Este identificador lo
usar el sistema JSF para referirse al validador en los archivos de configuracin o en los controles que
se inserten en las pginas jsf.
En el caso de que el validador necesite parmetros, la clase debe implementar una interfaz ms:
javax.faces.component.StateHolder. Este interfaz permite almacenar los parmetros del validador
entre llamadas.
Ejemplos
Comprobar que el valor a validar tiene una longitud igual a 9. Los primeros 8 caracteres deben ser
nmeros (corresponden al DNI) y el ltimo debe ser una letra (la del NIF)
2.
3.
4.
Creamos el Validador
import
import
import
import
import
import
import
java.util.regex.Matcher;
java.util.regex.Pattern;
javax.faces.application.FacesMessage;
javax.faces.component.UIComponent;
javax.faces.context.FacesContext;
javax.faces.validator.Validator;
javax.faces.validator.ValidatorException;
import org.apache.commons.lang.StringUtils;
/**
* Validador de NIF
* @author Ejemplo
*/
public class NifValidator implements Validator
{
/**
* Efecta el proceso de validacin
*/
public void validate(FacesContext contex,UIComponent
component, Object value) throws ValidatorException
{
// Si el valor es null, lo transformamos en un
valor vaco
String valor =
StringUtils.defaultString((String)value);
<validator>
<validator-id>ejemplo.nifValidator</validator-id>
<validator-class>
com.ejemplo.tutorialValidacion.NifValidator
</validator-class>
</validator>
Creamos la pgina
La llamaremos validacion_ejemplo.jsp y colgar de WebContent; su contenido es el siguiente:
<%@ taglib
<%@ taglib
<%@ taglib
prefix="t"
<html>
<head>
<title>EJEMPLO VALIDACIONES</title>
<link rel="stylesheet"
type="text/css" href="/servicios/madeja/css/estilos.css">
</head>
<body>
<f:view>
<h:form id="idUsuarios" name="gestionUsuariosBean">
<h:messages id="messageList" styleClass="error"
showSummary="true" showDetail="true" />
<h:panelGrid columns="2"
styleClass="gestionUsuariosFormTable"
headerClass="gestionUsuariosFormHead
er"
footerClass="gestionUsuariosFormFoot
er"
columnClasses="gestionUsuariosFormLa
bels, gestionUsuariosFormInputs" width="600">
<!-- Nombre -->
<h:outputLabel for="login" value="Nombre"/>
<h:panelGroup>
<h:inputText id="nombre"
styleClass="CajasTexto" size="30" maxlength="100"
value="#{gestionUsuariosBean.
nombre}">
<f:validateLength maximum="50"
/>
</h:inputText>
</h:panelGroup>
<!-- Nif -->
<navigation-rule>
<from-view-id>/validacion_ejemplo.jsp</fromview-id>
<navigation-case>
<fromoutcome>resultado_validacion_nuestra</from-outcome>
<to-viewid>/resultado_validacion_nuestra.jsp</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
<%@ taglib
<%@ taglib
<%@ taglib
prefix="t"
<html>
<head>
<title>Ejemplo VALIDACIONES</title>
<link rel="stylesheet"
type="text/css" href="/servicios/madeja/css/estilos.css">
</head>
<body>
<f:view>
<h:form id="idUsuarios" name="gestionUsuariosBean">
<h:messages id="messageList" styleClass="error"
showSummary="true" showDetail="true" />
<h:panelGrid columns="2"
styleClass="gestionUsuariosFormTable"
headerClass="gestionUsuariosFormHead
er"
footerClass="gestionUsuariosFormFoot
er"
columnClasses="gestionUsuariosFormLa
bels, gestionUsuariosFormInputs" width="600">
<!-- Nombre -->
<h:outputLabel for="login" value="Nombre"/>:
<h:panelGroup>
<h:outputText
value="#{gestionUsuariosBean.nombre}"/>
</h:panelGroup>
<!-- Nif -->
<h:outputLabel for="nif" value="Nif"/>
<h:panelGroup>
<h:outputText value="#{gestionUsuariosBean.nif}"/>
</h:panelGroup>
<h:panelGroup>
<h:commandButton action="home" value="Volver" />
<f:verbatim> </f:verbatim>
</h:panelGroup>
</h:panelGrid>
</h:form>
</f:view>
</body>
</html>