Arquitectura y Ciclo de Vida JSF

Arquitectura de JavaServer Faces

JSF es un framework para desarrollo de componentes de interfaz de usuario en aplicaciones web. JSF implementa el patrón Model-View-Controller para la separación de la lógica y la presentación. Esta separación facilita la división del trabajo entre desarrolladores de acuerdo a las diferentes disciplinas involucradas (programadores, diseñadores web, etc). Esto se logra gracias a una clara separación del código de la interfaz de usuario (View) de los datos y lógica (Model). Todas las interacciones de los usuarios con la aplicación son gestionadas por un servlet (Controller).

Arquitectura JSF

Ciclo de Vida JSF

Fase 1 (Restaurar Vista)

Esta fase del Ciclo de Vida JSF comienza cuando el usuario accede a la URL o hace click en un boton o link en la aplicacion. Si es la primera invocacion que se hace de la vista, JSF procedera a generar el arbol de componentes correspondiente y dejarlo disponible en el FacesContext. Si la vista ya fue accedida previamente entonces el arbol de componentes de la vista ya deberia estar disponible en el contexto, por lo que en este caso lo que se hace es recuperar esos componentes.

Entonces, en esta primera fase surgen dos nuevos conceptos: el primer concepto es que una vista puede ser invocada la primera vez cuando se accede directamente a la pagina del navegador. En este caso se creara el arbol de componentes de la vista en el contenedor. A este tipo de solicitud se la denomina ‘Initial Request’. O puede ser que ya exista, por ejemplo, si el usuario interactua con la pagina, y se refresca automaticamente al devolver un resultado con el nuevo valor, o bien al mostrar un error. Esta ya seria una segunda (o posterior) invocacion a la vista y a este tipo de solicitud se la denomina ‘Postback Request’.

Fase 2 (Aplicar Valores de la Peticion)

Luego que el arbol de componentes fue creado o restaurado en un request, se asigna a cada componente del arbol el valor del correspondiente parametro del request. En este punto el dato cargado en la vista en un componente de tipo input es asignado su correspondiente componente en el modelo.
Si algun componente de de tipo input tiene el atributo immediate con valor ‘true’ las validaciones, conversiones y eventos asociados con ese componente seran procesados en esta fase.
En cambio, si un componente de tipo command tiene el atributo immediate en ‘true’ y ademas el o los inputs de la misma vista tienen el atributo immediate en ‘false’ entonces el evento asociado al componente command (button, etc) se ejecutara sin que se asignen los valores de la vista al arbol de componentes.

Fase 3 (Procesar Validaciones)

En esta fase se ejecutan los validadores registrados en el arbol de componentes ademas de realizarse las conversiones para los componentes de entrada que no posean el atributo immediate en ‘true’.
Si el valor en alguno de los componentes no cumple con algunas de las reglas de validacion, o se produce algun error de conversion se agregara el correspondiente mensaje de error en el contexto y se pasara directamente a la Fase 6 (Renderizar Respuesta).

Fase 4 (Actualizar Valores del Modelo)

Una vez que los datos son validados por JSF, recorre cada uno de los componentes del arbol para asignar el valor al correspondiente bean de la aplicacion del usuario. El bean y el atributo correspondiente son identificados gracias al valor del atributo value en el componente de la vista. En caso de necesitarse conversiones, se realizan en este momento.

Fase 5 (Invocar Aplicacion)

En esta fase se invoca a la accion que se haya ejecutado desde la vista (por ejemplo desde un command button). Esto significa que, cuando el usuario haga click en el commando buttom presentado en la vista, se invocara al metodo del Managed Bean que corresponda.

La vista a visualizarse una vez terminada la ejecucion del metodo dependera del resultado que retorne el mismo. Si la accion retorna un String, se espera que este sea el nombre de una vista (nombre de un archivo xhtml), por lo que JSF buscara y renderizara dicha vista. En caso de que el metodo devuelva un String vacio o directamente void, JSF volvera a renderizar la vista actual.

Fase 6 (Renderizar Respuesta)

En esta fase se renderizara la vista obtenida en la fase anterior. Es decir, una vez obtenido el archivo xhtml correspondiente el mismo sera traducido a html para poder ser renderizado por el navegador web.

En este post podrás ver un ejemplo práctico de manejo de los eventos del Ciclo de Vida JSF.

Conclusión

Comprender el ciclo de vida de una aplicación JavaServer Faces es crucial para desarrollar aplicaciones web eficientes y efectivas. Al comprender las diferentes fases y eventos que ocurren durante el ciclo de vida, los desarrolladores pueden optimizar su código y evitar problemas comunes durante el proceso de desarrollo. En última instancia, al tomarse el tiempo para comprender y dominar el ciclo de vida de JavaServer Faces, los desarrolladores pueden crear aplicaciones web que sean rápidas, sólidas y fáciles de mantener.


Te puede interesar