JavaServer Faces(JSF)

RECU-0101 (Recurso Ficha Técnica)

Descripción

La tecnología JavaServer Faces es un framework de interfaz de componentes de usuarios del lado del servidor para las aplicaciones web basadas en la tecnología Java. Los principales componentes de la tecnología JSF son:

  • Una API para:Representar componentes de Interfaz de Usuario (UI) y gestionar su estado.
    • Manejar eventos, validar en el servidor y conversión de datos.
    • Definir la navegación de páginas.
    • Soporte de internacionalización y accesibilidad.
  • Dos librerías de etiquetas JSP personalizadas para expresar componentes en una página JSP y enlazar los componentes a objetos del servidor.

El modelo de programación bien definido y las librerías de etiquetas facilitan la construcción y mantenimiento de las aplicaciones web con Interfaces de Usuario (UI) de servidor. Con un mínimo esfuerzo se podría:

  • Poner componentes en una página mediante etiquetas de componentes.
  • Enlazar eventos generados por componentes con código de la aplicación en el servidor.
  • Relacionar componentes UI en una página con datos del servidor.
  • Construir una UI con componentes reutilizables y extensibles.
  • Salvar y restaurar el estado de la UI más allá de la vida de las peticiones.

JSF es una especificación desarrollada por la Java Community Process. Actualmente existen cuatro versiones de esta especificación:

Por hacer un resumen, JSF proporciona:

  1. Una clara separación entre vista y modelo.
  2. Desarrollo basado en componente, no en peticiones.
  3. Las acciones del usuario se ligan muy fácilmente al código en el servidor.
  4. Creación de familias de componentes visuales para acelerar el desarrollo.
  5. Ofrece múltiples posibilidades de elección entre distintos desarrollos.

Ventajas e inconvenientes

Existen numerosas ventajas que hacen que JSF sea una tecnología apropiada para el desarrollo de aplicaciones web:

  • Una de las grandes ventajas de la tecnología JavaServer Faces es que ofrece una clara separación entre el comportamiento y la presentación. Las aplicaciones Web construidas con tecnología JSP conseguían parcialmente esta separación. Sin embargo, una aplicación JSP no puede mapear peticiones HTTP al manejo de eventos específicos del componentes o manejar elementos UI como objetos con estado en el servidor.
  • La tecnología JavaServer Faces permite construir aplicaciones Web que implementan una separación entre el comportamiento y la presentación tradicionalmente ofrecidas por arquitectura UI del lado del cliente. JSF se hace fácil de usar al aislar al desarrollador del API de Servlet.
  • La separación de la lógica de la presentación también le permite a cada miembro del equipo de desarrollo de una aplicación Web enfocarse en su parte del proceso de desarrollo, y proporciona un sencillo modelo de programación para enlazar todas las piezas.
  • Otro objetivo importante de la tecnología JavaServer Faces es mejorar los conceptos familiares Disadvantage de componente-UI y capa-Web sin limitar a una tecnología de script particular o un lenguaje de marcas. Aunque la tecnología JavaServer Faces incluye una librería de etiquetas JSP personalizadas para representar componentes en una página JSP, los APIs de la tecnología JavaServer Faces se han creado directamente sobre el API JavaServlet. Esto permite hacer algunas cosas: usar otra tecnología de presentación junto a JSP, crear componentes propios personalizados directamente desde las clases de componentes, y generar salida para diferentes dispositivos cliente. Así, se podrán encapsular otras tecnologías como Ajax en componentes JSF, haciendo su uso más fácil y productivo, al aislar al programador de ellas.
  • JavaServer Faces ofrece una gran cantidad de componentes opensource para las funcionalidades que se necesiten. Los componentes Tomahawk de MyFaces y ADFFaces de Oracle son un ejemplo. Además, también existe una gran cantidad de herramientas para el desarrollo IDE en JSF al ser el estándar de JAVA.
  • La tecnología JavaServer Faces proporciona una rica arquitectura para manejar el estado de los componentes, procesar los datos, validar la entrada del usuario, y manejar eventos.
  • Además, ofrece una rápida adaptación para nuevos desarrolladores.

No obstante, el uso de JavaServer Faces también tiene un conjunto de desventajas:

  • Su naturaleza como estándar hace que la evolución de JSF no sea tan rápida como pueda ser la de otros entornos como WebWork, Wicket, Spring , etc.

Requisitos e incompatibilidades

En relación con el uso de JSF, se han detectado lo siguientes requisitos agrupados por categoría:

  • Versiones de Java.
  1. JDK 1.4.x
  2. JDK 1.5.x
  • Contenedor de Servlet.
  1. Tomcat 4.x
  2. Tomcat 5.x
  3. JRun 4 (SP1a)
  4. JBoss 3.2.x
  5. JBoss 4.0.x
  6. BEA Weblogic 8.1
  7. Jonas 3.3.6 w/ Tomcat
  8. Resin 2.1.x
  9. Jetty 4.2.x
  10. Jetty 5.1.x
  11. Websphere 5.1.2
  12. OC4J

No obstante cualquier motor de servlet que cumpla la especificación 2.3 debería valer. Respecto a JSP, con la versión 1.2 es bastante, pero MyFaces usa características de la versión 2.0, por lo tanto en estos contenedores habrá que instalar un jar adicional que viene con la distribución, jsp-2.0.jar.

IMPORTANTE. No añadir ese jar si no es necesario, por ejemplo, en tomcat 5.5, la presencia de este archivo causaría que el motor de servlet dejara de funcionar.

Además habría que tener en cuenta las siguientes consideraciones:

  • El motor de servlet debe ser compatible con la especificación 2.3 y las JSP deben ser acordes a la especificación 1.2.
  • JSF únicamente soporta peticiones realizadas con POST.
  • La especificación no obliga a que haya validaciones en el cliente, si bien dos desarrollos como MyFaces y Shale proporcionan esta posibilidad.

Interacciones

JSF es una especificación y como tal no tiene ninguna incompatibilidad con otros sistemas. Por ello, se pueden escoger los desarrollos que se desean para las necesidades de cada uno, el de jakarta, el de sun , el de oracle, o incluso el de IBM. Habría que estudiar cada uno de estos desarrollos para saber cuáles son las incompatibilidades que cada uno hace constar.

Limitaciones que impone la especificación

  • Todo desarrollo de esta especificación tiene que soportar JSP como tecnología de vista. Pero JSF no obliga a que esta sea la opción por defecto. De hecho hay otros proyectos de código abierto que proporcionan la posibilidad de escribir la capa cliente sin usar JSP, como son Facelets y Clay. Concretamente, con Facelets podríamos escribir toda esta capa en HTML.
  • El hecho de que JSP sea una tecnología obligatoria, hace que podamos seguir desarrollando con las etiquetas JSP con las que estemos más acostumbrados, como pueda ser JSTL.
  • Puede coexistir con Struts en una misma aplicación web. Esto lo hace especialmente importante para las aplicaciones ya escritas en Struts que quieran ir migrando poco a poco a JSF. Se puede cambiar unas pocas páginas y ver los cambios de manera paulatina. Haciendo, por lo tanto, muy suave la transición.