JSF 2.0 desventajas? Honestamente, aparte de la curva de aprendizaje relativamente pronunciada cuando no tienes un conocimiento sólido sobre desarrollo web básico (HTML / CSS / JS, lado del servidor versus lado del cliente, etc.) y la API básica de Java Servlet (solicitud / respuesta / sesión , reenvío / redireccionamiento, etc.), no se me ocurren inconvenientes serios. JSF en su versión actual todavía necesita deshacerse de la imagen negativa que obtuvo durante las primeras edades, durante las cuales hubo varias desventajas serias.
JSF 1.0 (marzo de 2004)
Esta fue la versión inicial. Estaba lleno de errores tanto en el núcleo como en las áreas de rendimiento que no desea conocer. Su aplicación web no siempre funcionó como esperaría intuitivamente. Usted, como desarrollador, huiría llorando.
JSF 1.1 (mayo de 2004)
Esta fue la versión de corrección de errores. El rendimiento aún no ha mejorado mucho. También hubo una gran desventaja: no se puede integrar HTML en la página JSF sin problemas. Todos los HTML simples vanilla se representan antes del árbol de componentes JSF. Debe envolver todo el vainilla simple en <f:verbatim>
etiquetas para que se incluyan en el árbol de componentes JSF. Aunque esto fue de acuerdo con la especificación, ha recibido muchas críticas. Consulte también ao JSF / Facelets: ¿por qué no es una buena idea mezclar JSF / Facelets con etiquetas HTML?
JSF 1.2 (mayo de 2006)
Esta fue la primera versión del nuevo equipo de desarrollo de JSF dirigido por Ryan Lubke. El nuevo equipo hizo un gran trabajo. También hubo cambios en la especificación. El cambio principal fue la mejora del manejo de la vista. Esto no solo separó completamente JSF de JSP, por lo que uno podría usar una tecnología de visualización diferente a JSP, sino que también permitió a los desarrolladores incorporar HTML simple en la página JSF sin problemas con las <f:verbatim>
etiquetas. Otro enfoque importante del nuevo equipo fue mejorar el rendimiento. Durante la vida útil de Sun JSF Reference Implementation 1.2 (que recibió el nombre en código de Mojarra desde la compilación 1.2_08, alrededor de 2008), prácticamente todas las compilaciones se enviaron con mejoras de rendimiento (principales) junto a las correcciones de errores habituales (menores).
La única desventaja grave de JSF 1.x (incluido 1.2) es la falta de un alcance entre la solicitud y el alcance de la sesión , el llamado alcance de conversación . Esto obligó a los desarrolladores a molestarse con elementos de entrada ocultos, consultas innecesarias de base de datos y / o abusar del alcance de la sesión cada vez que se desea retener los datos del modelo inicial en la solicitud posterior para procesar con éxito validaciones, conversiones, cambios de modelo e invocaciones de acción en el más Aplicaciones web complejas. El dolor podría atenuarse mediante la adopción de una biblioteca de terceros que retiene los datos necesarios en la solicitud posterior, como el componente MyFaces Tomahawk <t:saveState>
, el alcance de la conversación JBoss Seam y la Orquesta MyFaces marco de conversación
Otra desventaja para los puristas de HTML / CSS es que JSF usa los dos puntos :
como carácter separador de ID para garantizar la unicidad del elemento HTML id
en la salida HTML generada, especialmente cuando un componente se reutiliza más de una vez en la vista (plantillas, componentes iterativos, etc.) . Debido a que este es un carácter ilegal en los identificadores CSS, necesitaría usar el \
para escapar del colon en los selectores CSS, lo que da como resultado selectores feos y de aspecto extraño como #formId\:fieldId {}
o incluso #formId\3A fieldId {}
. Consulte también ¿Cómo utilizar el ID de elemento HTML generado por JSF con dos puntos ":" en los selectores CSS? Sin embargo, si no eres un purista, lee también De manera predeterminada, JSF genera identificadores inutilizables, que son incompatibles con la parte css de los estándares web .
Además, JSF 1.x no se envió con las instalaciones de Ajax fuera de la caja. No es realmente una desventaja técnica, pero debido a la exageración de la Web 2.0 durante ese período, se convirtió en una desventaja funcional. Exadel fue el primero en presentar Ajax4jsf, que se desarrolló a fondo durante los años y se convirtió en la parte central de la biblioteca de componentes JBoss RichFaces . También se enviaron otras bibliotecas de componentes con poderes incorporados de Ajax, el conocido es ICEfaces .
Aproximadamente a la mitad de la vida útil de JSF 1.2, se introdujo una nueva tecnología de vista basada en XML: Facelets . Esto ofreció enormes ventajas por encima de JSP, especialmente en el área de plantillas.
JSF 2.0 (junio de 2009)
Este fue el segundo lanzamiento importante, con Ajax como palabra de moda. Hubo muchos cambios técnicos y funcionales. JSP se reemplaza por Facelets como la tecnología de vista predeterminada y Facelets se expandió con capacidades para crear componentes personalizados utilizando XML puro (los llamados componentes compuestos ). Consulte también ¿Por qué se prefiere Facelets sobre JSP como lenguaje de definición de vista desde JSF2.0 en adelante?
Los poderes Ajax se introdujeron en el sabor del <f:ajax>
componente que tiene muchas similitudes con Ajax4jsf. Se introdujeron anotaciones y mejoras en la convención sobre la configuración para eliminar el faces-config.xml
archivo detallado tanto como sea posible. Además, el carácter separador de ID del contenedor de nombres predeterminado se :
volvió configurable, por lo que los puristas de HTML / CSS podrían respirar aliviados. Todo lo que necesita hacer es definirlo como init-param
en web.xml
el nombre javax.faces.SEPARATOR_CHAR
y la garantía de que no se está utilizando el mismo carácter en cualquier parte del ID de cliente, tales como -
.
Por último, pero no menos importante, se introdujo un nuevo alcance, el alcance de la vista . Eliminó otra desventaja importante de JSF 1.x como se describió anteriormente. Simplemente declara el bean @ViewScoped
para habilitar el alcance de la conversación sin molestar a todas las formas de retener los datos en solicitudes posteriores (conversacionales). Un @ViewScoped
bean vivirá mientras esté enviando y navegando posteriormente a la misma vista (¡independientemente de la pestaña / ventana abierta del navegador!), Ya sea sincrónica o asincrónicamente (Ajax). Consulte también Diferencia entre el alcance de vista y solicitud en beans administrados y ¿Cómo elegir el alcance de bean correcto?
Aunque prácticamente se eliminaron todas las desventajas de JSF 1.x, hay errores específicos de JSF 2.0 que podrían convertirse en un obstáculo. La @ViewScoped
falla en los manejadores de etiquetas debido a un problema de huevo de gallina en el ahorro de estado parcial. Esto se corrige en JSF 2.2 y se carga en Mojarra 2.1.18. Tampoco se admite pasar atributos personalizados como HTML5data-xxx
. Esto se soluciona en JSF 2.2 por la nueva característica de elementos / atributos de paso a través. Además, la implementación de JSF Mojarra tiene su propio conjunto de problemas . Relativamente muchos de ellos están relacionados con el comportamiento<ui:repeat>
a veces poco intuitivo de , la nueva implementación de ahorro parcial de estado y el alcance flash mal implementado . La mayoría de ellos están arreglados en una versión Mojarra 2.2.x.
Alrededor del tiempo JSF 2.0, se introdujo PrimeFaces , basado en jQuery y jQuery UI. Se convirtió en la biblioteca de componentes JSF más popular.
JSF 2.2 (mayo de 2013)
Con la introducción de JSF 2.2, HTML5 se utilizó como palabra de moda, aunque técnicamente solo era compatible con todas las versiones anteriores de JSF. Consulte también JavaServer Faces 2.2 y compatibilidad con HTML5, ¿por qué se sigue utilizando XHTML ? La nueva característica más importante de JSF 2.2 es el soporte para atributos de componentes personalizados, abriendo así un mundo de posibilidades, como grupos de botones de radio personalizados sin mesa .
Además de los errores específicos de la implementación y algunas "pequeñas cosas molestas" como la incapacidad de inyectar un EJB en un validador / convertidor (ya solucionado en JSF 2.3), no hay realmente desventajas importantes en la especificación JSF 2.2.
MVC basado en componentes vs MVC basado en solicitud
Algunos pueden optar por que la principal desventaja de JSF es que permite muy poco control detallado sobre el HTML / CSS / JS generado. Eso no es propio de JSF, es solo porque es un marco MVC basado en componentes , no un marco MVC basado en solicitud (acción) . Si un alto grado de control de HTML / CSS / JS es su requisito principal al considerar un marco MVC, entonces ya no debería estar mirando un marco MVC basado en componentes, sino un marco MVC basado en solicitudes como Spring MVC . Solo necesita tener en cuenta que tendrá que escribir todo ese HTML / CSS / JS repetitivo usted mismo. Consulte también Diferencia entre MVC de solicitud y MVC de componente .
Ver también: