Desvantagens do JSF 2.0? Honestamente, além da curva de aprendizado relativamente íngreme, quando você não possui um conhecimento sólido sobre o desenvolvimento básico da Web (HTML / CSS / JS, lado do servidor versus lado do cliente, etc.) e a API básica do Java Servlet (request / response / session , encaminhamento / redirecionamento etc.), não há desvantagens sérias. O JSF em sua versão atual ainda precisa se livrar da imagem negativa obtida durante as primeiras idades, durante as quais houve várias desvantagens sérias.
JSF 1.0 (março de 2004)
Este foi o lançamento inicial. Estava cheio de bugs nas áreas principais e de desempenho que você não quer saber. Seu aplicativo da web nem sempre funcionava como você esperaria intuitivamente. Você, como desenvolvedor, se afastava chorando.
JSF 1.1 (maio de 2004)
Esta foi a versão do bugfix. O desempenho ainda não foi muito melhorado. Havia também uma grande desvantagem: você não pode alinhar HTML na página JSF na perfeição. Todo o HTML simples de baunilha é renderizado antes da árvore de componentes JSF. Você precisa agrupar todas as baunilhas comuns em <f:verbatim>
tags para que elas sejam incluídas na árvore de componentes JSF. Embora isso tenha sido conforme a especificação, isso recebeu muitas críticas. Veja também ao JSF / Facelets: por que não é uma boa ideia misturar JSF / Facelets com tags HTML?
JSF 1.2 (maio de 2006)
Este foi o primeiro lançamento da nova equipe de desenvolvimento JSF liderada por Ryan Lubke. A nova equipe fez um ótimo trabalho. Também houve mudanças nas especificações. A principal mudança foi a melhoria do tratamento da vista. Isso não apenas desanexou o JSF totalmente do JSP, para que se pudesse usar uma tecnologia de exibição diferente da JSP, mas também permitiu que os desenvolvedores incorporassem HTML simples de baunilha na página JSF sem se preocupar com as <f:verbatim>
tags. Outro foco importante da nova equipe foi melhorar o desempenho. Durante o tempo de vida da Sun JSF Reference Implementation 1.2 (codinome Mojarra desde a compilação 1.2_08, por volta de 2008), praticamente toda compilação foi enviada com (maiores) aprimoramentos de desempenho ao lado das pequenas (usuais) correções de erros.
A única desvantagem séria do JSF 1.x (incluindo 1.2) é a falta de um escopo entre o pedido e o escopo da sessão , o chamado escopo de conversação . Isso forçou os desenvolvedores a lidar com elementos de entrada ocultos, consultas desnecessárias ao banco de dados e / ou abusar do escopo da sessão sempre que se deseja reter os dados do modelo inicial na solicitação subseqüente para processar com êxito validações, conversões, alterações de modelo e invocações de ação nos mais aplicações web complexas. A dor pode ser amenizada com a adoção de uma biblioteca de terceiros que retém os dados necessários na solicitação subsequente, como o componente MyFaces Tomahawk <t:saveState>
, a estrutura de conversa do JBoss Seam escopo de conversa do e o MyFaces Orchestra .
Outra desvantagem para os puristas de HTML / CSS é que o JSF usa os dois pontos :
como caractere separador de ID para garantir a exclusividade do elemento HTML id
na saída HTML gerada, especialmente quando um componente é reutilizado mais de uma vez na visualização (modelo, componentes de iteração, etc.) . Como esse é um caractere ilegal nos identificadores CSS, você precisaria usar o \
para escapar dos dois pontos nos seletores CSS, resultando em seletores feios e de aparência estranha, como #formId\:fieldId {}
ou mesmo #formId\3A fieldId {}
. Consulte também Como usar o ID do elemento HTML gerado por JSF com dois-pontos ":" nos seletores CSS? No entanto, se você não é um purista, leia também Por padrão, o JSF gera IDs inutilizáveis, incompatíveis com a parte css dos padrões da web .
Além disso, o JSF 1.x não foi enviado com as instalações do Ajax imediatamente. Não é realmente uma desvantagem técnica, mas devido ao hype da Web 2.0 durante esse período, tornou-se uma desvantagem funcional. Exadel chegou cedo para introduzir o Ajax4jsf, que foi completamente desenvolvido durante os anos e se tornou a parte principal da biblioteca de componentes do JBoss RichFaces . Outras bibliotecas de componentes também foram enviadas com recursos Ajax internos, sendo a mais conhecida a ICEfaces .
Cerca da metade da vida útil do JSF 1.2, uma nova tecnologia de exibição baseada em XML foi introduzida: Facelets . Isso ofereceu enormes vantagens acima do JSP, especialmente na área de modelagem.
JSF 2.0 (junho de 2009)
Este foi o segundo grande lançamento, com o Ajax como palavra de ordem. Houve muitas mudanças técnicas e funcionais. O JSP é substituído pelo Facelets como a tecnologia de exibição padrão e o Facelets foi expandido com recursos para criar componentes personalizados usando XML puro (os chamados componentes compostos ). Consulte também Por que o Facelets é preferível ao JSP como a linguagem de definição de visualização do JSF2.0 em diante?
Os poderes do Ajax foram introduzidos no sabor do <f:ajax>
componente, que tem muitas semelhanças com o Ajax4jsf. Anotações e aprimoramentos de convenção sobre configuração foram introduzidos para eliminar o faces-config.xml
arquivo detalhado o máximo possível. Além disso, o caractere padrão do separador de ID do contêiner de nomeação :
tornou-se configurável, para que os puristas de HTML / CSS pudessem respirar aliviados. Tudo que você precisa fazer é defini-lo como init-param
na web.xml
com o nome javax.faces.SEPARATOR_CHAR
e garantir que você não está usando o personagem-se em qualquer lugar do ID do cliente, tais como -
.
Por último, mas não menos importante, um novo escopo foi introduzido, o escopo da visualização . Ele eliminou outra grande desvantagem do JSF 1.x, como descrito anteriormente. Você acabou de declarar o bean @ViewScoped
para ativar o escopo da conversa sem precisar procurar todas as maneiras de reter os dados em solicitações subsequentes (conversacionais). Um @ViewScoped
bean permanecerá enquanto você posteriormente enviar e navegar para a mesma exibição (independentemente da guia / janela do navegador aberta!), De forma síncrona ou assíncrona (Ajax). Consulte também Diferença entre o escopo Exibir e Solicitar nos beans gerenciados e Como escolher o escopo direito do bean?
Embora praticamente todas as desvantagens do JSF 1.x tenham sido eliminadas, existem erros específicos do JSF 2.0 que podem se tornar um limitador de exibição. A @ViewScoped
falha em manipuladores de tag devido a um problema galinha-ovo em economia de estado parcial. Isso foi corrigido no JSF 2.2 e suportado no Mojarra 2.1.18. Também não há suporte para a transmissão de atributos personalizados como o HTML5data-xxx
. Isso foi corrigido no JSF 2.2 pelos novos elementos / atributos de passagem. Além disso, a implementação do JSF Mojarra tem seu próprio conjunto de problemas . Relativamente, muitos deles estão relacionados ao comportamento às vezes não intuitivo<ui:repeat>
, à nova implementação de economia de estado parcial e ao escopo do flash mal implementado . A maioria deles é corrigida na versão Mojarra 2.2.x.
Por volta do tempo do JSF 2.0, o PrimeFaces foi introduzido, com base nas interfaces de usuário jQuery e jQuery. Tornou-se a biblioteca de componentes JSF mais popular.
JSF 2.2 (maio de 2013)
Com a introdução do JSF 2.2, o HTML5 foi usado como palavra-chave, mesmo que isso fosse tecnicamente suportado em todas as versões mais antigas do JSF. Consulte também o suporte ao JavaServer Faces 2.2 e HTML5, por que o XHTML ainda está sendo usado . O novo recurso mais importante do JSF 2.2 é o suporte a atributos de componentes personalizados, abrindo assim um mundo de possibilidades, como grupos de botões de opção sem tabela personalizados .
Além de erros específicos de implementação e algumas "coisinhas irritantes", como a incapacidade de injetar um EJB em um validador / conversor (já corrigido no JSF 2.3), não há realmente grandes desvantagens na especificação do JSF 2.2.
MVC baseado em componente vs MVC baseado em solicitação
Alguns podem optar por que a principal desvantagem do JSF é que ele permite muito pouco controle refinado sobre o HTML / CSS / JS gerado. Isso não é do JSF, é apenas porque é uma estrutura MVC baseada em componente , não uma estrutura MVC baseada em solicitação (ação) . Se um alto nível de controle de HTML / CSS / JS é seu principal requisito ao considerar uma estrutura MVC, você já não deve estar olhando para uma estrutura MVC baseada em componentes, mas em uma estrutura MVC baseada em solicitação, como o Spring MVC . Você só precisa levar em consideração que precisará escrever todo esse padrão HTML / CSS / JS. Consulte também Diferença entre Request MVC e Component MVC .
Veja também: