Anda di halaman 1dari 5

VALIDACIONES Y CONVERSIONES EN JSF

JSF proporciona mecanismos para el formateo, conversin y validacin de los componentes; veremos cmo estos mecanismos pueden ser extendidos de forma sencilla para adaptarlos a nuestras necesidades. Para entender en qu momento de la vida de una pgina JSF se producen las conversiones y validaciones de los componentes del formulario, quiz nos sea de ayuda el siguiente diagrama:

JSF proporciona dos mecanismos separados que nos ayudan a validar los valores introducidos por los usuarios a la hora de enviar los formularios:

El primer mecanismo es el de conversin y est definido por el interfaz javax.faces.convert.Converter y sus mltiples implementaciones. Las conversiones aseguran que el tipo de un dato introducido en un formulario JSF sea el correcto, es decir, que el dato tipo cadena del formulario corresponde con el tipo JAVA esperado, y que est especificado en la propiedad correspondiente del bean. Los Conversores (implementaciones de la interfaz Converter) son los componentes que se encargan de hacer estas transformaciones (cadena Tipo JAVA y viceversa). JSF invoca a los Conversores antes de efectuar las validaciones y por lo tanto antes de aplicar los valores introducidos a las propiedades del bean. En el caso de que un dato tipo cadena no se corresponda con el tipo JAVA apropiado, el Conversor correspondiente lanzar un ConversionException y el componente se marcar como invalidado.

El segundo mecanismo es el de validacin y est definido por la interfaz javax.faces.validator.Validator y sus mltiples implementaciones. El proceso de validacin se asegura que el dato introducido en el correspondiente componente es correcto segn la lgica de la aplicacin. El proceso de validacin ocurre antes de que el framework asigne los valores introducidos en el formulario a las propiedades del bean y justo despus de que se hayan aplicado las conversiones, en el caso de que haya. Las validaciones aseguran que un dato introducido en un formulario JSF tenga un valor correcto.

1. Usando un conversor estndar


Antes de nada debemos tener en cuenta que los conversores estndar que proporciona JSF se dividen en conversores a tipos numricos (NumberConverter) y conversores a tipos Fecha (DateTimeConverter) Existen dos formas de indicar que el valor de un determinado componente de nuestra pgina va a ser convertido: Aadiendo el atributo converter=#{identificador_conversor} al componente. Slo los componentes del tipo UIInput (inputText, inputSecret, inputHidden) y outputText aceptan esta propiedad. Un ejemplo sera el siguiente:
<h:inputText converter=#{Double} value=#{bean.propiedad} />

JSF deja a nuestra disposicin los siguientes conversores estndar: TIPO DE CONVERSOR BigDecimalConverter BigIntegerConverter NumberConverter IntegerConverter ShortConverter ByteConverter CharacterConverter FloatConverter DoubleConverter BooleanConverter DateTimeConverter IDENTIFICADOR DEL CONVERSOR BigDecimal BigInteger Number Integer Short Byte Character Float Double Boolean DateTime

Incluyendo <f:convertNumber [lista_atributos]/> o <f:convertDateTime [lista_atributos]/> dentro de la invocacin al componente, como por ejemplo:

<h:inputText value=#{bean.propiedad}> <f:convertNumber type=currency/> </h:inputText>

O por ejemplo
<h:inputText id=invoiceDate value=#{bean.propiedad}> <f:convertDateTime pattern=M/d/yyyy/> </h:inputText>

Los atributos disponibles para tipos number son: NOMBRE DEL ATRIBUTO currencyCode currencySymbol groupingUsed integerOnly locale maxFractionDigits maxIntegerDigits minFractionDigits minIntegerDigits pattern type Y los disponibles para tipos DateTime: NOMBRE DEL ATRIBUTO dateStyle parseLocale pattern timeStyle timeZone type TIPO String String o Locale String String String o TimeZone String TIPO String String boolean boolean java.util.Locale int Int Int int String String

2. Creando nuestro propio conversor


Para crear nuestro propio conversor, debemos seguir los siguientes pasos: Crear una clase que implemente la interfaz javax.faces.convert.Converter. Implementar el mtodo getAsObject, que convierte el valor del componente que tengamos en la pgina (tipo cadena) a un objeto (tipo JAVA que requiera la aplicacin). Implementar el mtodo getAsString, que convierte el objeto (tipo JAVA de nuestra aplicacin) a tipo cadena (requerido por la pgina). Registrar el nuevo conversor en el contexto de JSF. Utilizarlo en la pgina insertando dentro del componente cuyo valor queramos convertir el tag <f:converter>.

3. Utilizando validaciones estndar de JSF


Ya hemos visto cmo los Conversores pueden cubrir gran parte de la funcionalidad necesaria para validar que los valores introducidos por los usuarios en un formulario JSF sean correctos. En adicin, los Validadores pueden realizar validaciones ms genricas durantes la fase de Validacin. Estos componentes implementan la interfaz javax.faces.validator.Validator, que contiene un nico mtodo validate(). JSF provee un conjunto de Validadores estndar que se describen en la tabla siguiente:

CLASE DE VALIDADOR
DoubleRangeValidator

TAG JSF
validateDoubleRange

ATRIBUTOS
minimum,maximum

DESCRIPCIN
Valida que el valor del componente sea mayor que un mnimo y mayor que un mximo. Este valor debe ser tipo float Valida que la longitud del valor del componente est entre un mnimo y un mximo Valida que el valor del componente sea mayor que un mnimo y mayor que un mximo. Este valor debe ser tipo entero

LengthValidator

validateLength

minimum,maximum

LongRangeValidator

validateLongRange

minimum,maximum

4. Creando nuestro propio Validador


Para crear nuestro propio Validador, debemos seguir los siguientes pasos: Crear una clase que implemente la interfaz javax.faces.validator.Validator. Implementar el mtodo validate. Registrar el nuevo validador en el contexto de JSF. Utilizarlo en la pgina insertando dentro del componente cuyo valor queramos validar el tag <f:validator>