¿Cuáles son las principales desventajas de Java Server Faces 2.0?


Ayer vi una presentación en Java Server Faces 2.0 que parecía realmente impresionante, a pesar de que actualmente soy un feliz ASP.NET Desarrollador MVC / jQuery. Lo que más me gustó de JSF fue la gran cantidad de componentes de interfaz de usuario habilitados para AJAX que parecen hacer que el desarrollo sea mucho más rápido que con ASP.NET MVC, especialmente en sitios AJAX pesados. Las pruebas de integración también se vieron muy bien.

Dado que la presentación solo enfatizó las ventajas de JSF, me gustaría escuchar sobre el otro lado como bien.

Así que mis preguntas son:

  • ¿Cuáles son las principales desventajas de Java Server Faces 2.0?
  • ¿Qué podría hacer que un desarrollador de JSF considere usar ASP.NET ¿MVC en lugar de JSF?
Author: Adrian Grigore, 2010-09-02

13 answers

JSF 2.0 desventajas? Honestamente, aparte de la curva de aprendizaje relativa empinada cuando no tiene un conocimiento de fondo sólido sobre desarrollo web básico (HTML/CSS/JS, lado del servidor versus lado del cliente, etc.) y la API básica de Servlet Java (solicitud/respuesta/sesión, reenvío/redireccionamiento, etc.), no se me ocurren desventajas serias. JSF en su versión actual todavía necesita deshacerse de la imagen negativa que ganó durante las primeras edades, durante las cuales hubo varias desventajas graves.

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 quieres saber. Tu aplicación web no siempre funcionó como esperabas intuitivamente. Tú como desarrollador correrías llorando.

JSF 1.1 (mayo de 2004)

Esta fue la versión de corrección de errores. El rendimiento aún no había mejorado mucho. También había una gran desventaja: no se puede insertar HTML en la página de JSF sin problemas. Todo el HTML simple de vainilla se renderiza antes de el árbol de componentes JSF. Necesita envolver todas las etiquetas plain vanilla en <f:verbatim> para que se incluyan en el árbol de componentes de JSF. Aunque esto fue según la especificación, esto ha recibido muchas críticas. Véase también a. o. 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 vista diferente a JSP, sino que también permitió a los desarrolladores insertar HTML básico en la página JSF sin tener que molestarse con las etiquetas <f:verbatim>. Otro enfoque importante del nuevo equipo fue mejorar el rendimiento. Durante la vida del Foro Sun Implementación de referencia 1.2 (que fue nombrado en código Mojarra desde la compilación 1.2_08, alrededor de 2008), prácticamente todas las compilaciones se enviaron con mejoras de rendimiento (mayores) junto con las correcciones de errores habituales (menores).

La única desventaja seria de JSF 1.x (incluyendo 1.2) es la falta de un ámbito entre el ámbito request y el ámbito session, el llamado ámbito conversation. Esto obligó a los desarrolladores a molestar con elementos de entrada ocultos, consultas de base de datos innecesarias y / o abusar de la ámbito de sesión siempre que se desee conservar los datos iniciales del modelo en la solicitud posterior para procesar con éxito validaciones, conversiones, cambios del modelo e invocaciones de acciones en las aplicaciones web más complejas. El dolor podría ser suavizado mediante la adopción de una biblioteca de terceros que conserva los datos necesarios en la solicitud posterior como MyFaces Tomahawk <t:saveState> componente, JBoss Seam conversation scope y MyFaces Orchestra conversation marco.

Otra desventaja para los puristas HTML/CSS es que JSF utiliza los dos puntos : como carácter separador de ID para garantizar la singularidad 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 iterantes, etc.). Debido a que este es un carácter ilegal en los identificadores CSS, tendría que usar el \ para escapar de los dos puntos en los selectores CSS, lo que resulta en selectores de aspecto feo y extraño como #formId\:fieldId {} o incluso #formId\3A fieldId {}. Ver también ¿Cómo usar el ID de elemento HTML generado por JSF con dos puntos": "en selectores CSS? Sin embargo, si no eres un purista, lee también De forma predeterminada, JSF genera ID inutilizables, que son incompatibles con la parte css de los estándares web.

También, JSF 1.x no se envió con las instalaciones de Ajax fuera de la caja. No es realmente una desventaja técnica, pero debido al bombo Web 2.0 durante ese período, se convirtió en una desventaja funcional. Exadel fue pronto para introducir Ajax4jsf, que se desarrolló a fondo durante los años y se convirtió en la parte central de JBoss RichFaces biblioteca de componentes. Otras bibliotecas de componentes también fueron enviadas con poderes Ajax incorporados, siendo la bien conocida ICEfaces .

A mitad de la vida de JSF 1.2, se introdujo una nueva tecnología de vista basada en XML: Facelets. Esto ofrecía enormes ventajas sobre JSP, especialmente en el área de plantillas.

JSF 2.0 (junio 2009)

Este fue el segundo gran lanzamiento, con Ajax como palabra de moda. Hubo muchos cambios técnicos y funcionales. JSP es reemplazado 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 ). Ver también ¿Por qué Facelets es preferible a JSP como el lenguaje de definición de vista a partir de JSF2.0?

Ajax poderes fueron introducidos en sabor de la <f:ajax> componente que tiene muchas similitudes con Ajax4jsf. Se introdujeron anotaciones y mejoras de convención sobre la configuración en matar el archivo detallado faces-config.xml tanto como sea posible. Además, el carácter separador de ID de contenedor de nombres predeterminado : se volvió configurable, por lo que los puristas de HTML/CSS podían respirar aliviados. Todo lo que necesita hacer es definirlo como init-param en web.xml con el nombre javax.faces.SEPARATOR_CHAR y asegurarse de que no está utilizando el carácter usted mismo en ningún lugar de los ID de cliente, como -.

Por último, pero no menos importante, se introdujo un nuevo ámbito, el ámbito view. Eliminó otro gran JSF 1.x desventaja como se describió anteriormente. Solo debe declarar el bean @ViewScoped para habilitar el alcance de la conversación sin molestar todas las formas de retener los datos en solicitudes posteriores (conversacionales). Un frijol @ViewScoped vivirá mientras posteriormente envíe y navegue a la misma vista (¡independientemente de la pestaña/ventana del navegador abierta!), bien de forma sincrónica o asíncrono (Ajax). Véase también Diferencia entre el ámbito de vista y el de solicitud en los beans administrados y ¿Cómo elegir el ámbito de bean correcto?

Aunque prácticamente todas las desventajas de JSF 1.x fueron eliminados, hay errores específicos de JSF 2.0 que podrían convertirse en un showstopper. Las @ViewScoped falla en los manejadores de etiquetas debido a un problema de huevo de gallina en el ahorro de estado parcial. Esto se soluciona en JSF 2.2 y backported en Mojarra 2.1.18. También , pasando atributos personalizados como el HTML5 data-xxx no es compatible. Esto se soluciona en JSF 2.2 por la nueva función passthrough elements/attributes. Further the JSF implementation Mojarra has its own set of issues. Relativamente muchos de ellos están relacionados con el comportamiento a veces no intuitivo de <ui:repeat>, la nueva implementación de ahorro de estado parcial y el alcance flash mal implementado . La mayoría de ellos se fijan en una Mojarra 2.2.versión x.

Alrededor de la hora JSF 2.0, PrimeFaces se introdujo, 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 fue utilizado como palabra de moda a pesar de que esto era técnicamente soportado en todas las versiones antiguas de JSF. Véase también JavaServer Soporta 2.2 y 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 un mundo de posibilidades, como grupos de botones de opción sin tabla personalizados.

Aparte de errores específicos de implementación y algunas "pequeñas cosas molestas", como la incapacidad de inyectar un EJB en un validador/convertidor (ya corregido en JSF 2.3), no hay desventajas realmente importantes en la especificación JSF 2.2.

MVC basado en componentes vs MVC basado en solicitudes

Algunos pueden optar por que la principal desventaja de JSF es que permite muy poco control de grano fino sobre el HTML/CSS / JS generado. Eso no es propio de JSF, eso es solo porque es un framework MVC basado en componentes, no un framework MVC basado en peticiones (acciones) . Si un alto grado de control de HTML / CSS / JS es su principal requisito al considerar un marco MVC, entonces ya no debería estar buscando un marco MVC basado en componentes, sino en un marco MVC basado en solicitudes como Spring MVC. Solo tienes que tener en cuenta que tendrás que escribir todo que HTML / CSS / JS boilerplate a ti mismo. Véase también Diferencia entre la petición MVC y el componente MVC.

Véase también:

 453
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:47

Después de 5 años de trabajar con JSF, creo que puedo agregar mis 2 centavos.

Dos principales inconvenientes JSF :

  1. Gran curva de aprendizaje. JSF es complejo, eso es verdad.
  2. Su componente naturaleza. El framework basado en componentes intenta ocultar la verdadera naturaleza de la Web, que viene con una gran cantidad de complicaciones y desastres (como no apoyar GET en JSF dentro de casi 5 años).
    IMHO ocultar Solicitud/Respuesta HTTP del desarrollador es un un error enorme. Desde mi experiencia, cada marco basado en componentes agrega abstracción al desarrollo web, y esa abstracción resulta en una sobrecarga innecesaria y una mayor complejidad.

Y inconvenientes menores que vienen a mi mente:

  1. Por defecto el ID del objeto está compuesto por los id de sus padres, por ejemplo form1:button1.
  2. No es fácil comentar un fragmento de página incorrecto. Tag <ui:remove> necesita contenido sintácticamente correcto que se analiza Por cierto.
  3. Componentes de tercera parte de baja calidad que, por ejemplo, no comprueban isRendered() dentro del método processXxx() antes de continuar.
  4. Incorporar LESS & Sencha es difícil.
  5. No juega bien con el DESCANSO.
  6. No es tan fácil para los diseñadores de UX, porque los componentes listos para usar tienen sus propios estilos CSS, que deben sobrescribirse.

No me malinterpretes. Como marco de componentes JSF en la versión 2 es realmente bueno, pero sigue siendo basado en componentes, y siempre lo será...

Por favor, eche un vistazo a la baja popularidad de Tapestry, Wicket y el bajo entusiasmo de los desarrolladores experimentados de JSF (lo que es aún más significativo). Y para contrastar, echa un vistazo al éxito de Rails, Grails, Django, Play! Framework-todos están basados en acciones y no tratan de ocultarse del programador true request/response y stateless nature de la web.

Para mí es una gran desventaja de JSF. IMHO JSF puede adaptarse a algún tipo de aplicaciones (intranet, formularios intensivos), pero para la vida real web aplicación no es un buen camino a seguir.

Espero que ayude a alguien con sus opciones que se refiere a front-end.

 49
Author: G. Demecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-25 19:31:01

Algunos inconvenientes que me vienen a la mente:

  1. JSF es un framework basado en componentes. Esto tiene restricciones inherentes que tienen que ver con obedecer la componente-modelo.
  2. AFAIK JSF solo soporta POST, así que si quieres un GET somewhere tienes para hacer un servlet/JSP simple.
  3. La mayoría de los componentes intentan proporcionar abstracciones sobre dominios como bases de datos relacionales y front-end JavaScript, y muchas veces estos las abstracciones son "filtrantes" y muy difíciles de depurar.
  4. Estas abstracciones podría ser un buen punto de partida para un desarrollador junior o alguien que no se siente cómodo con un dominio en particular (por ejemplo, JavaScript front-end), pero son muy difíciles de optimizar para el rendimiento, ya que hay varias capas involucradas, y la mayoría de las personas que las usan tienen poca comprensión de lo que está pasando bajo el capó.
  5. Los mecanismos de plantillas que normalmente se usan con JSF no tienen nada que ver con cómo funcionan los desigers web. Los editores WYSIWYG para JSF son primitivos y, en cualquier caso, su designer te dará HTML / CSS que tendrás que pasar años convirtiendo.
  6. Cosas como las expresiones EL no se comprueban estáticamente y tanto el compilador como los IDE no están haciendo un buen trabajo para encontrar errores, por lo que terminarás con errores que tendrás que detectar en tiempo de ejecución. Esto podría estar bien para lenguajes dinámicamente tipeados como Ruby o PHP, pero si tengo que soportar la gran hinchazón del ecosistema Java, exijo escribir para mis plantillas.

Para resumir: El tiempo guardará con JSF, de evitar escribir el código JSP/servlet / bean boilerplate, lo gastará x10 para hacerlo escalar y hacer exactamente lo que quiera que haga.

 22
Author: Kay Pale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-12 19:35:36

Para mí, la mayor desventaja de JSF 2.0 es la curva de aprendizaje no solo de JSF, sino las bibliotecas de componentes que tiene que usar para que haga un trabajo útil. Considere la asombrosa cantidad de especificaciones y estándares con los que tiene que lidiar para ser realmente competente:

  • HTML en las diversas encarnaciones. No finjas que no necesitas saberlo.
  • HTTP when cuando no puedes averiguar lo que está pasando tienes que abrir Firebug y ver. Para eso necesitas saber este.
  • CSS Like Nos guste o no. No es tan malo realmente y hay algunas herramientas agradables por ahí al menos.
  • XML probably JSF probablemente será el primer lugar en el que utilice espacios de nombres en este grado.
  • Especificación de Servlet. Tarde o temprano entrarás en métodos de llamada en este paquete. Aparte de eso, usted tiene que saber cómo sus Facelets se convierte en XHTML o lo que sea.
  • JSP (sobre todo para que sepas por qué no lo necesitas en JSF)
  • JSTL (de nuevo, principalmente para hacer frente a marco heredado)
  • Lenguaje de expresión (EL) en sus diversas formas.
  • ECMAScript, JavaScript, o como quieras llamarlo.
  • JSON should deberías saber esto incluso si no lo usas.
  • AJAX. Yo diría que JSF 2.0 hace un trabajo decente de ocultar esto de usted, pero todavía necesita saber lo que está pasando.
  • El DOM. Y cómo lo usa un navegador. Consulte ECMAScript.
  • Eventos DOM a un tema por sí mismo.
  • Arquitectura de persistencia de Java (JPA) es decir, si desea que su aplicación tenga una base de datos de back-end.
  • Java en sí.
  • JSEE mientras estás en ello.
  • La especificación de Inyección de Dependencias de Contexto (CDI) y cómo choca y se usa con JSF 2.0
  • jQuery I Me gustaría ver que te llevas bien sin ella.

Ahora, una vez que haya terminado con eso, puede continuar con las especificaciones propietarias, es decir, las bibliotecas de componentes y las bibliotecas de proveedores que recogerá a lo largo del camino:

  • PrimeFaces (mi biblioteca de componentes de elección)
  • RichFaces
  • MyFaces
  • ICEfaces
  • EclipseLink (mi proveedor de JPA)
  • Hibernar
  • Soldadura

Y no olvides el contenedor! Y todos esos archivos de configuración:

  • GlassFish (2, 3, etc)
  • JBoss
  • Tomcat

Entonces THIS ¿ESTO LO HACE FÁCIL? Claro, JSF 2.0 es "fácil" siempre y cuando todo lo que quieres hacer es las páginas web más básicas con el interacciones más simples.

En pocas palabras, JSF 2.0 es la mezcla más complicada y engorrosa de tecnologías pegadas entre sí como existe en el universo del software hoy en día. Y no se me ocurre nada que preferiría usar.

 17
Author: AlanObject,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-19 02:10:05
  1. Los desarrolladores inexpertos generalmente crearán aplicaciones que son dolorosamente lentas y el código será realmente feo y difícil de mantener. Es engañosamente fácil de comenzar, pero en realidad requiere algo de inversión en el aprendizaje si desea escribir buenos programas.
  2. Al menos al principio, a menudo se "atascará" en algún problema y pasará más tiempo leyendo publicaciones de balusc en Internet que trabajando realmente :) Después de un tiempo será cada vez menos de eso, pero todavía puede ser molesto.
  3. Aún más molesto cuando descubre que el problema no se debe a su falta de conocimiento/error, sino a un error. Mojarra era(es?) bastante buggy, y otra capa de componentes añade aún más problemas. Richfaces fue la pieza más grande de software de mierda jamás escrito:) No sé cómo es ahora en la versión 4. Tenemos Primefaces que es mejor, pero aún así se encontrará con errores o falta de características, especialmente con componentes más exóticos. Y ahora tendrá que pagar por Primefaces actualizar. Así que diría que es buggy, pero está mejorando, especialmente después de la versión 2.2 se corrigieron algunos problemas con las especificaciones. Marco de trabajo cada vez más maduro, pero todavía lejos de ser perfecto (tal vez myfaces mejor?).
  4. No lo encuentro especialmente flexible. A menudo, si necesita algo muy, muy personalizado y no hay componentes que lo haga, será un poco doloroso. Una vez más, estoy hablando desde la perspectiva del desarrollador promedio: el que tiene plazos, tutoriales de lectura rápida y busca stackoverflow al quedarse atascado porque no hay tiempo para aprender cómo funciona realmente:) A menudo algunos componentes parece tener "casi" lo que necesita, pero no exactamente y a veces puede pasar demasiado tiempo para hacer que haga algo que desea :) Necesidad de tener cuidado en la evaluación si es mejor crear su propio componente existente o tortura. En realidad, si está creando algo realmente único, no recomendaría JSF.

Así que, en resumen, mis inconvenientes serían: Complejidad, Desarrollo no muy suave progreso, buggy, inflexible.

Por supuesto que también hay ventajas, pero eso no es lo que preguntaste. De todos modos esa es mi experiencia con el marco de otros podrían tener opiniones diferentes, así que la mejor manera es simplemente probarlo por un tiempo para ver si es para usted (solo algo más complejo - no ejemplos ingenuos - JSF realmente brilla allí:) IMHO mejor caso de uso para JSF es aplicaciones de negocios, como CRMs, etc...

 12
Author: Koks Skirtumas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-14 13:27:16

"JSF generará HTML y JavaScript de la capa de vista que no puede controlar o cambiar sin entrar en el código del controlador."

En realidad, JSF le da la flexibilidad, puede usar componentes estándar/de terceros o crear los suyos propios, que tiene control total sobre lo que se renderiza. Es solo un xhtml que necesita para crear sus componentes personalizados con JSF 2.0.

 11
Author: Cagatay Civici,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-06 13:35:17

Desarrollamos un proyecto de muestra con JSF (Fue una investigación de tres semanas, así que puede que hayamos perdido algunas cosas!)

Intentamos usar core jsf, si se necesita un componente usamos PrimeFaces.

El proyecto era un sitio web con navegación. Cada página debe cargarse a través de ajax cuando se hace clic en el menú.

El sitio tiene dos casos de uso:

  1. Una página con una cuadrícula. La cuadrícula se carga a través de ajax y debería admitir la clasificación y paginación
  2. Una página de asistente de tres pasos. Cada página tiene validación del lado del cliente (para validaciones simples) y validación base ajax del lado del servidor (para validaciones complejas). Cualquier excepción de servidor ( de la capa de servicio) debe mostrarse en la misma página del asistente sin navegar a la página siguiente.

Encontramos que:

  1. Necesita usar algunos hacks de OmniFaces para arreglar el estado de la vista JSF. El estado JSF se dañará cuando incluya páginas a través de ajax entre sí. Esto parece un error en JSF y puede ser corregido en el siguiente versiones (no en 2.3).
  2. El flujo de JSF no funciona correctamente con ajax (o no podríamos hacerlo funcionar!) Intentamos usar el componente primeface wizard en su lugar, pero la validación del cliente parece no ser compatible y significa que no era estándar JSF flow standard.
  3. Cuando se utilizan algunos componentes de jQuery como jqGird, y necesita cargar los resultados JSON, entonces se le aconseja utilizar servlet puro, El JSF no hará nada por usted. Así que si usted utiliza este tipo de componentes, su diseño no encaja en JSF.
  4. Tratamos de hacer algunos scripts de cliente cuando ajax completa por ajaxComplete y encontramos que el PF 4 ha implementado sus propios eventos ajax. Teníamos algunos componentes de jQuery y necesitamos cambiar su código.

Si cambia el ejemplo anterior a un proyecto no Ajax (o al menos un proyecto menos ajax) no se enfrentará a muchos de los problemas anteriores.

Resumimos nuestra investigación como:

JSF no está funcionando bien en una base totalmente ajax sitio.

Por supuesto, encontramos muchas características agradables en JSF que pueden ser muy útiles en algunos proyectos, así que considere las necesidades de su proyecto.

Por favor, consulte los documentos técnicos de JSF para revisar las ventajas de JSF, y en mi opinión la mayor ventaja de JSF, es el apoyo COMPLETO Y ENORME de @BalusC; -)

 8
Author: Alireza Fattahi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-30 12:32:17

No soy un experto en Caras de Servidor Java en absoluto. Pero en mi humilde opinión la principal desventaja es que es del lado del servidor. Estoy cansado de aprender y usar marcos de capa de presentación web del lado del servidor como ASP.NET Formularios Web, ASP.NET MVC, Java Server Faces, Struts, frameworks php y frameworks ruby on rails. Me despedí de todos ellos, y saludé a Angularjs y TypeScript. Mi capa de presentación se ejecuta en el navegador. No importa si es servido por Windows IIS ejecutando php o ASP.NET, o si lo es servido por un servidor web Apache que se ejecuta en Linux. Solo necesito aprender un marco que funcione en todas partes.

Sólo mis dos centavos.
 8
Author: Jesús López,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-17 12:57:54

Para mí, el mayor defecto de JSF es el pobre soporte para páginas generadas mediante programación (dinámicamente).
Si desea construir su página (crear modelo de componente de página) dinámicamente a partir de código java. Por ejemplo, si está trabajando en WYSIWYG web page constructor. La documentación adecuada de este caso de uso no está generalmente disponible. Hay muchos puntos en los que tienes que experimentar y el desarrollo es tranquilo y lento. Muchas cosas simplemente no funcionan como esperarías. Pero en general su posible hackearlo de alguna manera.
Lo bueno es que no es problema en filosofía o arquitectura de JSF. Simplemente no está lo suficientemente elaborado (que yo sepa).

JSF 2 trajo Componentes compuestos que deberían facilitar el desarrollo de componentes, pero su soporte para la construcción dinámica (programática) es muy pobre. Si supera un proceso tranquilo, complicado y casi indocumentado de construcción de componentes Compuestos dinámicos, descubrirá que Si anida pocos componentes compuestos un poco más profundo, dejan de funcionar, lanzando algunas excepciones.

Pero parece que la comunidad JSF es consciente de estas deficiencias. Ellos están trabajando en esto, como se puede ver en estas dos bugs
http://java.net/jira/browse/JAVASERVERFACES-1309
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599

La situación debería ser mejor con JSF 2.2 al menos si estamos hablando de especificación.

 5
Author: Ondrej Bozek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-30 21:31:48

Comentando mis últimos meses de experiencia en Primefaces / JSF:

  • Si puedes usar componentes "listos para usar", supongo que no es terrible.
  • Sin embargo, no funciona bien tan pronto como sales y necesitas UIs personalizadas. - Por ejemplo, necesitábamos usar bootstrap de Twitter para nuestro proyecto. (No primefaces bootstrap).
    • Ahora nuestras páginas funcionan de la siguiente manera:
      • Carga la página.
      • El usuario interactúa con un Primefaces que tiene funcionalidad ajax
      • Los enlaces javascript de Bootstrap se rompen
      • Ejecutamos javascript adicional para volver a enlazar todo

La promesa de JSF de evitar escribir javascript se convirtió en escribir más javascript de lo que tendríamos si no usáramos Primefaces to y ese javascript es arreglar lo que Primefaces rompe.

Es un sumidero de tiempo unless a menos que vuelvas a usar cosas "fuera del estante". También muy feo (Primefaces) cuando se tiene que trabajar con Selenio. Todo se puede hacer ... pero de nuevo's no hay mucho tiempo.

Definitivamente evite esto si está trabajando con un equipo de UX/diseño y necesita iterar rápidamente en la interfaz de usuario can puede ahorrar tiempo aprendiendo jquery/escribiendo HTML directo.o mirando react/angular.

 5
Author: rprasad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 15:28:14

JSF tiene muchas ventajas, siendo la pregunta en desventaja permítanme añadir un par de puntos sobre ella.

En un escenario práctico de implementación de un proyecto web con un marco de tiempo que necesita para mantener un ojo en los siguientes factores.

  • ¿Tiene suficientes miembros senior en su equipo que puedan sugerir lo mejor controles adecuados para cada escenario?
  • ¿Tiene el ancho de banda para acomodar la curva de aprendizaje inicial?

  • ¿tiene suficiente experiencia en su equipo que puede revisar el JSF
    cosas producidas por los desarrolladores?

Si su respuesta es 'No' para las preguntas, puede terminar en una base de código no mantenible.

 1
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-14 08:33:10

JSF solo tiene una desventaja: antes de comenzar el desarrollo "JSF", debe comprender claramente el desarrollo web, java central y la arquitectura front-end.

Hoy en día, los "nuevos" marcos de JavaScript solo intentan copiar/pegar el modelo basado en componentes "JSF".

 0
Author: Armen Arzumanyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-28 19:37:34

Entre todos los frameworks "mainstream" como Spring MVC, Wicket, Tapestry, etc., el JSF de Java EE con sus componentes compuestos es la tecnología de capa de presentación y orientada a componentes más elaborada proporcionada. Es un poco engorroso e incompleto en comparación con las soluciones proporcionadas por HybridJava.

 0
Author: Dima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-29 15:46:38