Jakarta Faces , anteriormente Jakarta Server Faces y JavaServer Faces ( JSF ), es una especificación de Java para crear interfaces de usuario basadas en componentes para aplicaciones web . [2] Se formalizó como estándar a través del Java Community Process como parte de la Java Platform, Enterprise Edition . Es un marco web MVC que simplifica la construcción de interfaces de usuario (UI) para aplicaciones basadas en servidor mediante el uso de componentes de UI reutilizables en una página. [3]
JSF 2.x utiliza Facelets como su sistema de plantillas predeterminado. Los usuarios del software también pueden utilizar XUL o Java . [4] JSF 1.x utiliza JavaServer Pages (JSP) como su sistema de plantillas predeterminado.
En 2001, la solicitud de especificación Java (JSR) original para la tecnología que finalmente se convirtió en JavaServer Faces propuso desarrollar un paquete con el nombre javax.servlet.ui
[5]
En junio de 2001, JavaWorld informaría sobre el diseño del equipo de Amy Fowler de "JavaServer Faces API" (también conocida como "Moonwalk") como "un marco de aplicación para crear interfaces de usuario basadas en la Web". [6]
Facelets (que fue diseñado específicamente para Java Server Faces) fue adoptado como la tecnología de visualización oficial para JSF 2.0. Esto elimina los conflictos de ciclo de vida que existían con JSP, lo que obliga a los desarrolladores de Java a buscar soluciones alternativas. [7]
Los nuevos desarrollos de JSF también brindan una amplia accesibilidad a las anotaciones de Java como @ManagedBean
, @ManagedProperty
y @FacesComponent
eso elimina la necesidad de faces-config.xml,
en todos los casos, excepto en la extensión del marco. La navegación también se simplifica, eliminando la necesidad de faces-config.xml
casos de navegación. Las transiciones de página se pueden invocar simplemente pasando el nombre de la Vista o Facelet deseado.
La incorporación de actualizaciones de guardado de estado parcial y modelo de objetos de documento (DOM) son parte del soporte AJAX estandarizado incorporado .
La última versión de JSF tiene compatibilidad integrada para manejar recursos como imágenes, CSS y Javascript, lo que permite incluir artefactos con bibliotecas de componentes, separarlos en archivos JAR o simplemente ubicarlos en un lugar coherente dentro de la aplicación web. Esto incluye la denominación lógica y el control de versiones de los recursos.
JSF 2.0 también incluye una serie de otros cambios, como agregar soporte para eventos, modos de desarrollo, preparación y producción separados, similares a RAILS_ENV
Ruby on Rails , y expandir significativamente el conjunto estándar de componentes.
Basado en un modelo de diseño de interfaz de usuario basado en componentes , JavaServer Faces utiliza archivos XML denominados plantillas de vista o vistas FaceletsFacesServlet
. Procesa las solicitudes, carga la plantilla de vista adecuada, crea un árbol de componentes, procesa los eventos y presenta la respuesta (normalmente en lenguaje HTML) al cliente. El estado de los componentes de la interfaz de usuario y otros objetos de interés se guarda al final de cada solicitud en un proceso denominado stateSaving (nota: transient true ) y se restaura en la próxima creación de esa vista. Tanto el cliente como el servidor pueden guardar objetos y estados.
JSF se utiliza a menudo junto con AJAX , una técnica de desarrollo de aplicaciones de Internet enriquecidas . AJAX es una combinación de técnicas y tecnologías de desarrollo web que permiten crear interfaces de usuario enriquecidas. Los componentes de interfaz de usuario de Mojarra (la implementación de referencia de JSF [12] ) y Apache MyFaces se desarrollaron originalmente solo para HTML, y AJAX tuvo que agregarse mediante JavaScript. Sin embargo, esto ha cambiado:
Debido a que JSF admite múltiples formatos de salida, se pueden agregar fácilmente componentes habilitados para AJAX para mejorar las interfaces de usuario creadas con JSF. La especificación JSF 2.0 proporciona compatibilidad integrada con AJAX al estandarizar el ciclo de vida de las solicitudes AJAX y proporcionar interfaces de desarrollo simples para los eventos AJAX. La especificación permite que un evento activado por el cliente pase por una validación, conversión e invocación de método, antes de devolver el resultado al navegador a través de una actualización de XML DOM.
JSF 2 incluye soporte para degradación elegante cuando JavaScript está deshabilitado en el navegador.
Las siguientes empresas y proyectos ofrecen bibliotecas de componentes o marcos JSF basados en AJAX:
En su publicación Technology Radar de enero de 2014, ThoughtWorks escribió: [13]
Seguimos viendo que los equipos tienen problemas al usar JSF (JavaServer Faces) y recomendamos evitar esta tecnología. Los equipos parecen elegir JSF porque es un estándar JEE sin evaluar realmente si el modelo de programación les conviene. Creemos que JSF tiene fallas porque intenta abstraer HTML , CSS y HTTP , exactamente lo contrario de lo que hacen los frameworks web modernos . JSF, al igual que los formularios web ASP.NET, intenta crear estado sobre el protocolo sin estado HTTP y termina causando una gran cantidad de problemas que involucran el estado compartido del lado del servidor. Somos conscientes de las mejoras en JSF 2.0, pero creemos que el modelo está fundamentalmente roto. Recomendamos que los equipos usen frameworks simples y adopten y comprendan las tecnologías web, incluyendo HTTP, HTML y CSS.
En febrero de 2014, Çağatay Çivici (director de PrimeFaces) respondió a las críticas de ThoughtWorks en una publicación titulada JSF ya no es lo que te han dicho . Çivici sostiene que las mejoras en JSF a lo largo de los años ofrecen muchas características que abarcan el desarrollo web moderno, brindando la opción de escribir tu propio JavaScript, HTML y CSS. También con respecto al estado, Çivici escribió: [14]
JSF es un marco con estado por naturaleza y el estado hace que sea fácil desarrollar aplicaciones web con él. Con las técnicas de gestión de estado mejoradas introducidas en JSF 2.0+ (por ejemplo, modo sin estado, almacenamiento parcial del estado), JSF también puede escalar.
En el artículo publicado en noviembre de 2014 en el sitio web DZone, titulado "Por qué debería evitar JSF", Jens Schauder escribió: [15]
Facelets, la tecnología de presentación preferida de JSF, parece a primera vista una tecnología de plantillas común y corriente como la buena y vieja JSP o Thymeleaf. Pero si miras más de cerca, el horror se hace evidente. En el mismo lugar donde estructuras tu HTML, también colocas la lógica de qué partes de la interfaz de usuario deben actualizarse en una acción. Una clara violación del principio de separación de intereses en mi libro. ¡Aún mejor es el atributo inmediato que cambia el ciclo de vida del lado del servidor! Y si esto no es suficiente, lo hace de diferentes maneras según la etiqueta en la que lo uses. No puedes inventarte cosas como esta.
En febrero de 2016, el sitio web de la comunidad empresarial Java TheServerSide publicó un artículo en el que se desaconsejaba el uso de JSF, ya que su uso podría comprometer la calidad del producto final. El artículo detallaba cinco razones: [16]
JavaServer Faces (JSF) 2.0 es un marco web MVC que se centra en simplificar la creación de interfaces de usuario (viene con más de 100 etiquetas de interfaz de usuario listas para usar) para aplicaciones web Java y hace que los componentes de interfaz de usuario reutilizables sean fáciles de implementar.
2.6 ¿Existe un nombre de paquete propuesto para la especificación de API? (es decir, javapi.something, org.something, etc.) [:] javax.servlet.ui
La API JavaServer Faces (también conocida como Moonwalk) promete proporcionar una solución elegante para implementar funcionalidad interactiva en navegadores incompatibles. [...] Diseñada por un equipo dirigido por Amy Fowler, arquitecta de AWT y Swing de Sun, la API JavaServer Faces proporcionará una colección de herramientas GUI que se ejecutarán en navegadores comunes utilizando HTML estándar.