Introducción a la Tecnología JavaServer Faces

El ciclo de vida de una p�gina JavaServer Faces page is similar al de una p�gina JSP: El cliente hace una petici�n HTTP de la p�gina y el servidor responde con la p�gina traducida a HTML. Sin embargo, debido a las caracter�sticas extras que ofrece la tecnolog�a JavaServer Faces, el ciclo de vida proporciona algunos servicios adicionales mediante la ejecuci�n de algunos pasos extras.

Los pasos del ciclo de vida se ejecutan dependen de si la petici�n se origin� o no desde una aplicaci�n JavaServer Faces y si la respuesta es o no generada con la fase de renderizado del ciclo de vida de JavaServer Faces. Esta secci�n explica los diferentes escenarios del ciclo de vida. Luego explica cada uno de estas fases del ciclo de vida utilizando el ejemplo guessNumber.

.�Escenarios de Procesamiento del Ciclo de Vida de una Petici�n

Una aplicaci�n JavaServer Faces soporta dos tipos diferentes de respuestas y dos tipos diferentes de peticiones:

  • Respuesta Faces:

    Una respuesta servlet que se gener� mediante la ejecuci�n de la fase Renderizar la Respuesta del ciclo de vida de procesamiento de la respuesta.

  • Respuesta No-Faces:

    Una respuesta servlet que no se gener� mediante la ejecuci�n de la fase Renderizar la Respuesta. Un ejemplo es una p�gina JSP que no incorpora componentes JavaServer Faces.

  • Petici�n Faces:

    Una petici�n servlet que fue enviada desde una Respuesta Faces pr�viamente generada. Un ejemplo es un formulario enviado desde un componente de interface de usuario JavaServer Faces, donde la URI de la petici�n identifica el �rbol de componentes JavaServer Faces para usar el procesamiento de petici�n.

  • Petici�n No-Faces:

    Una petici�n Servlet que fue enviada a un componente de aplicaci�n como un servlet o una p�gina JSP, en vez de directamente a un componente JavaServer Faces.

La combinaci�n de estas peticiones y respuestas resulta en tres posibles escenarios del ciclo de vida que pueden existir en una aplicaci�n JavaServer Faces:

  • Escenario 1: Una Petici�n No-Faces genera una Respuesta Faces:

    Un ejemplo de este escenario es cuando se pulsa un enlace de una p�gina HTML que abre una p�gina que contiene componentes JavaServer Faces. Para dibujar una Respuesta Faces desde una petici�n No-Faces, una aplicaci�n debe proporcionar un mapeo FacesServlet en la URL de la p�gina que contiene componentes JavaServer Faces. FacesServlet accepta peticiones entrantes y pasa a la implementaci�n del ciclo de vida para su procesamiento.

  • Escenario 2: Una Petici�n Faces genera una Respuesta No-Faces:

    Algunas veces una aplicaci�n JavaServer Faces podr�a necesitar redirigir la salida a un recurso diferente de la aplicaci�n Web diferente o generar una respuesta que no contiene componentes JavaServer Faces. En estas situaciones, el desarrollador debe saltarse la fase de renderizado (Renderizar la Respuesta) llamando a FacesContext.responseComplete. FacesContext Contiene toda la informaci�n osociada con una Petici�n Faces particular. Este m�todo se puede invocar durante las fases Aplicar los Valores de Respuesta, Procesar Validaciones o Actualizar los Valores del Modelo.

  • Escenario 3: Una Petici�n Faces genera una Respuesta Faces:

    Es el escenario m�s com�n en el ciclo de vida de una aplicaci�n JavaServer Faces. Este escenario implica componentes JavaServer Faces enviando una petici�n a una aplicaci�n JavaServer Faces utilizando el FacesServlet. Como la petici�n ha sido manejada por la implementaci�n JavaServer Faces, la aplicaci�n no necesita pasos adicionales para generar la respuesta. Todos los oyentes, validadores y conversores ser�n invocados autom�ticamente durante la fase apropiada del ciclo de vida est�ndar, como se describe en la siguiente secci�n.

.�Ciclo de Vida Est�ndar de Procesamiento de Peticiones

La mayor�a de los usuarios de la tecnolog�a JavaServer Faces no necesitar�n conocer a fondo el ciclo de vida de procesamiento de una petici�n. Sin embargo, conociendo lo que la tecnolog�a JavaServer Faces realiza para procesar una p�gina, un desarrollador de aplicaciones JavaServer Faces no necesitar� preocuparse de los problemas de renderizado asociados con otras tecnolog�as UI. Un ejemplo ser�a el cambio de estado de los componentes individuales. Si la selecci�n de un componente como un checkbox afecta a la apariencia de otro componente de la p�gina, la tecnolog�a JavaServer Faces manejar� este evento de la forma apropiada y no permitir� que se dibuje la p�gina sin reflejar este cambio.

La siguiente figura ilusta los pasos del ciclo de vida petici�n-respuesta JavaServer Faces

.�Reconstituir el �rbol de Componentes

Cuando se hace una petici�n para una p�gina JavaServer Faces, como cuando se pulsa sobre un enlace o un bot�n, la implementaci�n JavaServer Faces comienza el estado Reconstituir el �rbol de Componentes.

Durante esta fase, la implementaci�n JavaServer Faces construye el �rbol de componentes de la p�gina JavaServer Faces, conecta los manejadores de eventos y los validadores y graba el estado en el FacesContext. El �rbol de componentes de la p�gina greeting.jsp del ejemplo guessNumber se parecer�a a esto:

.�Aplicar Valores de la Petici�n

Una vez construido el �rbol de componentes, cada componente del �rbol extrae su nuevo valor desde los par�metros de la petici�n con su m�todo decode. Entonces el valor es almacenado localmente en el componente. Si falla la conversi�n del valor, se genera un mensaje de error asociado con el componete y se pone en la cola de FacesContext. Este mensaje se mostrar� durante la fase Renderizar la Respuesta, junto con cualquier error de validaci�n resultante de la fase Procesar Validaciones.

Si durante esta fase se produce alg�n evento, la implementaci�n JavaServer Faces emite los eventos a los oyentes interesados.

En este punto, si la aplicaci�n necesita redirigirse a un recurso de aplicaci�n Web diferente o generar una respuesta que no contenga componentes JavaServer Faces, puede llamar a FacesContext.responseComplete.

En el caso del componente userNumber de la p�gina greeting.jsp, el valor es cualquier cosa que el usuario introduzca en el campo. Como la propiedad del objeto del model unida al componente tiene un tipo Integer, la implementaci�n JavaServer Faces convierte el valor de un String a un Integer.

En este momento, se han puesto los nuevos valores en los componentes y los mensajes y eventos se han puesto en sus colas.

.�Procesar Validaciones

Durante esta fase, la implementaci�n JavaServer Faces procesa todas las validaciones registradas con los componentes del �rbol. Examina los atributos del componente que especifican las reglas de validaci�n y compara esas reglas con el valor local almacenado en el componente. Si el valor local no es v�lido, la implementaci�n JavaServer Faces a�ade un mensaje de error al FacesContext y el ciclo de vida avanza directamente hasta la fase Renderizar las Respuesta para que la p�gina sea dibujada de nuevo incluyendo los mensajes de error. Si hab�a errores de conversi�n de la fase Aplicar los Valores a la Petici�n, tambi�n se mostrar�n.

En este momento, si la aplicaci�n necesita redirigirse a un recurso de aplicaci�n Web diferente o generar una respuesta que no contenga componentes JavaServer Faces, puede llamar a FacesContext.responseComplete.

Si se han disparado eventos durante esta fase, la implemetnaci�n JavaServer Faces los emite a los oyentes interesados.

En la p�gina greeting.jsp, la implementaci�n JavaServer Faces procesa el validador sobre la etiqueta input_number de UserNumber. Verifica que el dato introducido por el usuario en el campo de texto es un entero entre 0 y 10. Si el dato no es v�lido, o ocurri� un error de converis�n durante la fase Aplicar los Valores a la Petici�n, el procesamiento salta a la fase Renderizar las Respuesta, durante la que se dibujar� de nuevo la p�gina greeting.jsp mostrando los mensajes de error de conversi�n o validaci�n en el componente asociado con la etiqueta output_errors.

.�Actualizar los Valores del Modelo

Una vez que la implementaci�n JavaServer Faces determina que el dato es v�lido, puede pasar por el �rbol de componentes y configurar los valores del objeto de modelo correspondiente con los valores locales de los componentes. S�lo se actualizar�n los componentes que tenga expresiones valueRef. Si el dato local no se puede convertir a los tipos especificados por las propiedades del objeto del modelo, el ciclo de vida avanza directamente a la fase Renderizar las Respuesta, durante la que se dibujar� de nuevo la p�gina mostr�ndo los errores, similar a lo que sucede con los errores de validaci�n.

En este punto, si la aplicaci�n necesita redirigirse a un recurso de aplicaci�n Web diferente o generar una respuesta que no contenga componentes JavaServer Faces, puede llamar a FacesContext.responseComplete.

Si se han disparado eventos durante esta fase, la implemetnaci�n JavaServer Faces los emite a los oyentes interesados.

En esta fase, a la propiedad userNumber del UserNumberBean se le da el valor del componente userNumber.

.�Invocar Aplicaci�n

Durante esta fase, la implementaci�n JavaServer Faces maneja cualquier evento a nivel de aplicaci�n, como enviar un formulario o enlazar a otra p�gina.

En este momento, si la aplicaci�n necesita redirigirse a un recurso de aplicaci�n Web diferente o generar una respuesta que no contenga componentes JavaServer Faces, puede llamar a FacesContext.responseComplete.

La p�gina greeting.jsp del ejemplo guessNumber tiene asociado un evento a nivel de aplicaci�n con el componente Command. Cuando se procesa este evento, una implementaci�n de ActionListener por defecto recupera la salida, �success�, desde el atributo action del componente. El oyente pasa la salida al NavigationHandler por defecto. Y �ste contrasta la salida con las reglas de navegaci�n definidas en el fichero de configuraci�n de la aplicaci�n para determinar qu� p�gina se debe mostrar luego.

Luego la implementaci�n JavaServer Faces configura el �rbol de componentes de la respuesta a esa nueva p�gina. Finalmente, la implementaci�n JavaServer Faces transfiere el control a la fase Renderizar la Respuesta.

.�Renderizar la Respuesta

Durante esta fase, la implementaci�n JavaServer Faces invoca las propiedades de codificaci�n de los componentes y dibuja los componentes del �rbol de componentes grabado en el FacesContext.

Si se encontraron errores durante las fases Aplicar los Valores a la Petici�n, Procesar Validaciones o Actualizar los Valores del Modelo, se dibujar� la p�gina original. Si las p�ginas contienen etiquetas output_errors, cualquier mensaje de error que haya en la cola se mostrar� en la p�gina.

Se pueden a�adir nuevos componentes en el �rbol si la aplicaci�n incluye renderizadores personalizados, que definen c�mo renderizar un componente. Despu�s de que se haya renderizado el contenido del �rbol, �ste se graba para que las siguientes peticiones puedan acceder a �l y est� disponible para la fase Reconstituir el �rbol de Componentes de las siguientes llamadas.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR