JavaServer Faces
Versão estável | 2.3.0 (Mojarra) (28 de março de 2017 | )
Escrito em | Java |
Gênero(s) | Framework de aplicação web |
Página oficial | javaserverfaces |
JavaServer Faces (JSF) é uma especificação Java para a construção de interfaces de usuário baseadas em componentes para aplicações web. Possui um modelo de programação dirigido a eventos, abstraindo os detalhes da manipulação dos eventos e organização dos componentes, permitindo que o programador se concentre na lógica da aplicação.
Foi formalizada como um padrão através do Java Community Process e faz parte da Java Platform, Enterprise Edition.
JSF 2 utiliza Facelets como seu sistema de template padrão. Outras tecnologias da camada de visão, como XUL também podem ser empregadas. Em contraste, JSF 1.x utiliza JavaServer Pages (JSP) como seu sistema de template padrão.
Características
[editar | editar código-fonte]JavaServer Faces é baseada em um modelo de desenho de IU (interface de usuário) baseada em componentes, usando arquivos XML chamados de modelos de visão ou Facelets views. Os pedidos são processados pelo FacesServlet, que carrega o modelo de visão adequado, constrói uma árvore de componentes, processa os eventos e apresenta a resposta, normalmente na linguagem HTML, para o cliente. O estado de componentes de interface do usuário e outros objetos de interesse de escopo, é salvo no final de cada pedido em um processo chamado stateSaving (nota: transiente true) e restaurado na próxima criação desta visão. Objetos e estados podem ser salvos ou no cliente ou no servidor.
- Permite que o desenvolvedor crie UIs através de um conjunto de componentes UIs pré-definidos;
- Fornece um conjunto de tags JSP para acessar os componentes;
- Reutiliza componentes da página;
- Associa os eventos do lado cliente com os manipuladores dos eventos do lado do servidor (os componentes de entrada possuem um valor local representando o estado no lado servidor);
- Fornece separação de funções que envolvem a construção de aplicações Web.
- Utiliza Ajax em alguns de seus componentes tornando alguns processos mais rápidos e eficientes.
Ciclo de vida
[editar | editar código-fonte]Ciclo de vida do JSF é o nome dado à sequência de processamento realizada na implementação JSF para a geração das visões. O JSF, diferente de outros frameworks, possui um processamento de requisição dividido em seis fases:
- Restauração da visão - o objetivo principal desta fase é construir a árvores de componentes.[1] Ela utiliza o template e cria a árvore inicial através da análise da requisição. Após isto, ela salva o estado da árvore no objeto
FacesContext
. Nas requisições subsequentes, ela cria a árvore do estado e procede a execução do resto do ciclo de vida. - Aplicação dos valores de requisição - o JSF pega cada componente da árvore começando com a raiz e a cria ou recupera do objeto
FacesContext
. Cada componente na árvore gerencia seus próprios valores e toma-os dos parâmetros, cookies e cabeçalhos da requisição HTTP. - Validações de processo - o JSF realiza a conversão e validação sobre todos os componentes começando com o raiz. O valor submetido de cada componente é convertido em um objeto e validado chamando-se o validador registrado. O JSF salva o valor submetido. Se ocorrer um erro durante a conversão ou validação, o ciclo de vida escapa diretamente para a fase de "apresentação da resposta".
- Atualização de valores de modelo - durante esta fase, o valor do componente é passado para o modelo através da atualização das propriedades dos backing beans.
- Invocação da aplicação - a manipulação de evento para cada ação e ouvidor de ação é executada começando com o(s) ouvidor(es) de ação e então a chamada do método de ação.
- Apresentação da resposta
Recursos visuais
[editar | editar código-fonte]O framework JSF permite a inserção, via IDE, de:
- Folhas de estilo (CSS);
- Comandos em JavaScript;
- Metodologia Ajax;
JSF inclui
[editar | editar código-fonte]- Suporte a internacionalização e acessibilidade;
- Um conjunto padrão de componentes de interface de usuário que possibilitam validação padronizada;
- Duas bibliotecas de etiqueta ("tag libraries") especiais do JavaServer Pages (JSP) para expressar a interface do JavaServer Faces dentro de uma página JSP;
- Um modelo de eventos do lado servidor ("server-side event model");
- Gerência de estados;
- Managed Beans;
- Linguagem de Expressão Unificada ("Unified Expression Language") para JSP 2.0 e JSF 1.2.
Ferramentas de desenvolvimento
[editar | editar código-fonte]Histórico
[editar | editar código-fonte]O JavaServer Faces ganhou expressão na versão 1.1 quando implementado pela comunidade utilizando a especificação 127[2] do Java Community Process,[3] evidenciando maturidade e segurança.
Hoje ele está na versão 2.0 da especificação 252[4] do JCP. A fundação Apache vem realizando esforços na implementação da especificação através do projeto MyFaces. O reconhecimento do trabalho é visto por diversas empresas, tanto é que a Oracle doou os fontes do ADF Faces, conjunto de mais de 100 componentes JSF, para o projeto MyFaces que o denominará de Trinidad.
O JSF é atualmente considerado pela comunidade Java como a última palavra em termos de desenvolvimento de aplicações Web utilizando Java, resultado da experiência e maturidade adquiridas com o JSP/Servlet (Model1), Model2 (MVC) e Struts.
Versões da JSF
[editar | editar código-fonte]Versão | Data | Características |
---|---|---|
1.0 | 11 de março de 2004 | Especificação inicial liberada. |
1.1 | 27 de maio de 2004 | Versão de correção de bugs. Não há mudanças de especificação. |
1.2 | 11 de maio de 2006 | Muitas melhorias nos sistemas centrais e API. Coincide com Java EE 5. Adoção inicial em Java EE. |
2.0 | 28 de junho de 2009 | Maior versão para facilidade de uso, funcionalidade melhorada e desempenho. Coincide com Java EE 6. |
2.1 | 22 de outubro de 2010 | Versão de correção da versão 2.0. Apenas uma quantidade muito menor de mudanças de especificação.[5][6] |
2.2 | 21 de maio de 2013 | Introduziu novos conceitos como visões sem estado, o fluxo de página e a capacidade de criar contratos de recursos portáteis.[7] |
2.3 | 28 de março de 2017 | Introduziu expressões de busca, URLS sem extensão, validação de beans para classes completas, comunicação via push usando WebSocket, e maior integração com CDI. |
Críticas
[editar | editar código-fonte]Em sua publicação "Technology Radar" de janeiro de 2014, a ThoughtWorks escreveu:[8]
“ | Nós continuamos vendo equipes tendo problemas com JSF – Java Server Faces – e recomendamos não utilizar esta tecnologia. As equipes parecem escolher o JSF só porque ele é um padrão JEE, sem realmente avaliar os modelos que se adequam aos projetos. Nós achamos que o JSF é falho porque ele tenta abstrair HTML, CSS e HTTP, exatamente o contrário do que fazem os frameworks web modernos. O JSF, da mesma forma que os webforms do ASP.NET, tenta criar uma abstração stateful sobre o protocolo HTTP, o que ocasiona um grande número de problemas envolvendo o compartilhamento de estado no lado do servidor. Nós tomamos conhecimento das melhorias do JSF 2.0, mas acreditamos que o modelo é fundamentalmente quebrado. Nós recomendamos às equipes usar frameworks simples e tomarem conhecimento das tecnologias web, incluindo HTTP, HTML e CSS. | ” |
Num artigo publicado em novembro de 2014 no DZone, intitulado "Por Que Você Deveria Evitar JSF", Jens Schauder escreveu:[9]
“ | Facelets, a tecnologia de apresentação primária do JSF, à primeira vista parece uma tecnologia comum de template como o bom e velho JSP ou o Thyme Leaf. Mas olhando de perto o horror torna-se óbvio. No mesmo lugar onde você estrutura seu HTML, você também põe a lógica onde partes da interface deveriam ser atualizadas após uma ação. Entendo isso como uma clara violação do princípio da separação de conceitos. Ainda melhor é o atributo imediato que muda o ciclo de vida do lado do servidor! E, como se tudo isto não fosse suficiente, as coisas são feitas de formas diferentes dependendo de como você usa. Não dá pra aguentar algo assim. | ” |
O The Server Side, site da comunidade Java Enterprise, não recomenda o uso do JSF e cita cinco problemas principais:[10]
- tarefas simples se tornam complicadas;
- falta de flexibilidade;
- difícil aprendizado;
- incompatibilidade com outras tecnologias que são padrão no Java; e
- primitivo suporte ao AJAX.
Referências
- ↑ Eclipse documentation - Árvore de componentes
- ↑ Java127
- ↑ JCP
- ↑ Java252
- ↑ http://blog.oio.de/2010/11/24/jsr-000314-javaservertm-faces-2-1/
- ↑ Bosch, Andy (29 de novembro de 2010). «Was ist neu in JSF 2.1» (em alemão). it-republik.de. Consultado em 19 de fevereiro de 2013
- ↑ «JSF 2.2 (JSR-344) is final» (em inglês). OIO's Developer Blog. 16 de abril de 2013. Consultado em 30 de novembro de 2017
- ↑ «Technology Radar» (PDF) (em inglês). ThoughtWorks. Janeiro de 2014. Consultado em 26 de outubro de 2017. Arquivado do original (PDF) em 7 de abril de 2016
- ↑ «Why You Should Avoid JSF» (em inglês). DZone. 3 de novembro de 2014. Consultado em 26 de outubro de 2017
- ↑ «Five drawbacks to choosing JSF as your web application framework» (em inglês). The Server Side. 2016. Consultado em 29 de novembro de 2017
Bibliografia
[editar | editar código-fonte]- CORDEIRO, Gilliard (2012). Aplicações Java para a web com JSF e JPA 1 ed. São Paulo: Casa do Código. 270 páginas. 978-85-66250-01-5
- LUCKOW, Décio Heinzelmann; MELO, Alexandre Altair de (2010). Programação Java para a Web. Aprenda a desenvolver uma aplicação financeira pessoal com as ferramentas mais modernas da plataforma Java 1 ed. São Paulo: Novatec. 640 páginas. ISBN 978-85-7522-238-6. Consultado em 4 de abril de 2021. Cópia arquivada em 24 de novembro de 2019
Ligações externas
[editar | editar código-fonte]