AjaxSingle: el partialSubmit de RichFaces.

AjaxSingle: el partialSubmit de RichFaces.


0. Índice de contenidos.


1. Introducción

Después de haber vistro una breve introducción a RichFaces y conocer el soporte que proporciona para Ajax de la mano de Ajax4JSF, en este tutorial vamos a examinar la posibilidad de hacer uso del atributo ajaxSingle que funciona como el atributo partialSubmit de ICEfaces, de modo que, asignado a un componente, se submite el valor del mismo al controlador iniciando un ciclo de vida JSF completo, que se aplicará únicamente a dicho componente.

La diferencia entre ICEfaces y RichFaces, es que el primero extiende los componentes de la implementación básica de JSF, de modo que tiene su propio <ice:inputText, sin embargo RichFaces no, con lo que dicho atributo no se puede asignar directamente al componente, hay que hacer uso de un sengundo componente no visual que imprime el soporte para Ajax.

En la redacción de este tutorial se da por hecho que el lector tiene experiencia en JSF y tiene nociones de RichFaces e ICEfaces.


2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 17′ (2.93 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.1
  • RichFaces 3.3.2.GA
  • Maven 2.2.1.
  • Eclipse 3.5: Ganymede, con IAM (plugin para Maven).
  • Apache Tomcat 6.0.20 con la jdk 1.5.

3. Inyectando ajax a componentes JSF.

Sobre la base del ejemplo visto en la introducción a RichFaces vamos a añadir al formulario algún componente adicional, inyectando sobre los mismos la funcionalidad ajax que comentamos:

El resultado es que, conforme vamos introduciendo valor a los campos del formulario, el mismo se va submitiendo al servidor mediante una petición en segundo plano a través de Ajax, pasándo por todo el ciclo de vida de JSF, únicamente para el componente que se submite.

AjaxSingle de RichFaces

Tenemos en la parte inferior una serie de campos de salida que muestran los valores que submitimos y podemos comprobar que los mismos cambian conforme vamos introduciendo datos en los campos de entrada del formulario.

Con todo ello podríamos realizar validaciones en el servidor con la apariencia de validaciones en el cliente (como ocurre con los campos nombre y apellidos), puesto que no se recarga toda la página.


4. Nuestro propio partialSubmit con el soporte de Ajax4JSF y facelets.

Vamos a reducir el código de nuestras páginas haciendo uso del soporte de facelets para la generación de nuestra propia tag library a través de la creación de componentes por composición.

Ya hemos comprobado que funciona la submisión en segundo plano y la recarga, con lo que nos vamos a olvidar de la parte inferior con los campos de salida y, como consecuencia, del atributo reRender.

Bajo WEB-INF/facelets/tags crearemos un fichero inputText.xhtml con el siguiente código:

Encapsula un componente de etiqueta con la descripción del campo que informa, además, de la obligatoriedad del mismo, el propio componente de entrada, y un componente que muestra los errores asociados a este.

Generaremos nuestra propia librería de tags, creando un fichero autentia.taglib.xml en el mismo directorio con el siguiente contenido:

Registramos la librería en el web.xml con el siguiente parámetro de contexto:

Y ya podemos hacer uso de nuestros tags en las páginas que lo requieran, el código de nuestra página quedaría como sigue

Bastante menos código para crear los campos del formulario. Deberíamos continuar con el calendario y con cada componente de formulario que vayamos utilizando.

Indirectamente estamos encapsulando la librería de componentes con la que realmente trabajamos.


5. Referencias.


6. Conclusiones.

El soporte de ajax no es nativo en los componentes de RichFaces, se debe añadir un componente de Ajax4JSF, pero nos da más control sobre qué partes de la página deben repintarse. Son dos puntos de vista distintos, tener el control o no tenerlo, puesto que con ICEfaces, precisamente de lo que te despreocupas es de eso mismo.

Con facelets podemos encapsular parte del problema y reducir el código de nuestras páginas xhtml. Es imprescindible el uso de un sistema de plantillas, usemos la tecnología que usemos para la vista.

Un saludo.

Jose

jmsanchez@autentia.com