Validaciones, immediate true o false?

En este artículo vamos a validar un campo de texto con el framework ADF, y veremos que sentido tiene setearle un valor true o false a la propiedad immediate. 

Como ya comentamos en la página donde explicábamos las fases que se recorren durante el ciclo de vida, los diferentes valores que acepta la propiedad immediate serán true o false dependiendo de la fase donde queramos que se produzca la acción deseada. En el caso de las validaciones un valor u otro afecta a que tipo de validación se va a realizar, si de lado del servidor o de lado del cliente.

  •    True: La validación en este caso se haría del lado del servidor, es decir, al setear la propiedad immediate a true hemos provocado que la validación se realize en la fase 2 y por tanto una vez que se envían los datos, antes de setear la propiedad al componente, se comprobará que se cumple la regla establecida. Si dicha validación es incorrecta, se generá un mensaje de error que es enviado al FacesContext. Dicho mensaje se mostraría por pantalla al usuario mediante el componente Messages.
  •    False: La validación se haría del lado del cliente, pues el componente ya tiene la propiedad seteada y la comprobación se realizaría en la fase 3, cuando se realice la validación los componentes ya tienen seteados los nuevos valores, y el aspecto de la validación cambia, ahora se realiza dicha validación mediante javascript.

Hemos visto que la propiedad immediate modifica el comportamiento de los componentes según su valor, obliga a los componentes a validarse, convertirse y capturar sus eventos en unas fase u otra. Esto es algo a tener muy en cuenta pues si empezamos a setear el valor de esta propiedad de manera indiscriminada en la página podemos encontrarnos muchos quebraderos de cabeza que a simple vista no notaremos que son producidos por el valor de dicha propiedad. Normalmente, se usa el valor true para que los eventos, validaciones, etc los podamos capturar antes de que se les setee el valor a los componentes.

A continuación vamos a añadirle un validador a un campo de texto para ver el efecto de la propiedad immediate, si hacemos uso del primer ejemplo de login que hicimos podemos añadirle al campo de texto del login un componente de tipo RegExpValidator, dependiendo del IDE que utilizemos, podemos arrastrar el componente dentro del inputText o bien añadimos las siguientes etiquetas al JSP:

<af:inputText
    label="Escriba aqui"
    binding="#{condiciones.inputText1}"
    id="inputText1"
    autoSubmit="true"
    immediate="false">
    <af:validateRegExp pattern="[a-z]*”
     noMatchMessageDetail=”Validacion Erronea”/>
</af:inputText>

Los objetos de tipo RegExpValidator tienen 3 propiedades que son : pattern, noMatchMessageDetail e id. En este ejemplo el patrón que le hemos puesto sirve para que solo acepte caracteres en minúscula. Si ejecutasemos la aplicación y metemos unos campos erroneos, aparecera el mensaje de error.

Como hemos comprobado si tenemos puesta la propiedad immediate a false la validación se realiza con javascript, si cambiamos el valor de la propiedad a true veremos como esta se realizá ahora en el lado del servidor, enviando un mensaje de error al FacesContext. Tenemos que asegurarnos que tenemos en el JSP insertado un componente de tipo Messages:

<af:messages binding="#{condiciones.messages1}" id="messages1"/>

Espero que os haya servido este tutorial para aprender no ya de los validadores, sino de los efectos que pueden causar en la aplicación los valores de esta propiedad. Podeís probar a validar muchos campos a la vez y ver que es lo que más conviene para cada formulario.

Tags:

Comments are closed.