A Tecnologia JavaServer Faces (JSF)

Gustavo Agostini Devitte*
*Curso de Ciência da Computação, Universidade Federal de Santa Maria, Brasil
agostini@inf.ufsm.br

Introdução

O uso de design patterns no desenvolvimento de páginas web veio para resolver o problema da manutenção dessas aplicações, e no caso do Java, o padrão utilizado é o MVC (Model View Controller).
O JavaServer Faces (JSF) é uma tecnologia que incorpora características de um framework MVC para a Web e de um modelo de interfaces gráficas baseado em eventos.
A ideia do MVC é dividir uma aplicação em três camadas: modelo, visualização e controle. No JSF, o controle é composto por um servlet denominado FacesServlet, por arquivos de configuração e por um conjunto de manipuladores de ações e observadores de eventos. O FacesServlet é responsável por receber requisições da Web, redicioná-las para o modelo e então remeter uma resposta. Os arquivos de configuração são responsáveis por realizar associações e mapeamentos de ações e pela definição de regras de navegação. Os manipuladores de eventos são responsáveis por receber os dados vindos da camada de visualização, acessar o modelo, e então devolver o resultado para o FacesServlet.

Características

Permite ao desenvolvedor criar UIs (User Interfaces) através de um conjunto de componentes pré-definidos;
Fornece um conjunto de tags JSP para acessar os componentes;
Reusa componentes da página;
Associa os eventos do lado cliente com manipuladores dos eventos do lado servidor;
Fornece separação de funções que envolvem a construção de aplicações WEB.
Embora JavaServer Faces forneça tags JSP para representar os componentes em uma página, ele foi projetado para ser flexível, sem limitar-se a nenhuma linguagem de marcação em particular, nem a protocolos ou tipos de clientes.
O JSF possui dois principais componentes: Java APIs para a representação de componentes UI e o gerenciamento de seus dados, manipulação/observação de eventos, validação de entrada, conversão de dados, internacionalização e acessibilidade; e taglibs JSP que expressam a interface JSF em uma página JSP e que realizam a conexão dos objetos no lado servidor.

Alguns Pontos Negativos

Documentação inferior à do JSP;
Maior opacidade na execução, debug e otimizações;
Rigidez da abordagem MVC;
Curva de aprendizagem.

Arquitetura

Aplicações JSF utilizam como padrão a interceptação HTTP via Servlet Faces e produz HTML. Sua arquitetura permite adicionar novos elementos, gerando outras características, possibilitando criar páginas usando eventos, listeners e componentes como o seu irmão Java Swing.

Fig. 1 - Arquitetura JSF

O Modelo de JSF

Para que o JSF funcione, registramos a classe FacesServlet no deployment descriptor (web.xml). Ao fazer isso, os pedidos são controlados pela classe javax.faces.webapp.FacesServlet (o controller do MVC), uma implementação de javax.servlet.Servlet, roteando o tráfego e administrando o ciclo de vida dos beans e componentes de interface do usuário (UI).
Os componentes do UI são organizados em uma estrutura de árvore onde, cada componente, pode ser associado com métodos e atributos de um bean. Cada componente também pode ser associado com uma função de validação ou classe.

Ciclo de Vida

Fig. 2 - O ciclo de vida do JSF

Restaurar Apresentação: esta fase inicia o processamento da requisição do ciclo de vida por meio da construção da árvore de componentes do JSF.
Aplicar Valores Requisitados: nesta fase, quaisquer novos valores inseridos são extraídos e armazenados por seus apropriados componentes. Se o valor do componente não for uma String, então ele é convertido para o seu determinado tipo.
Processar Validações: depois do valor de cada componente ser atualizado, na fase de processo de validações, os componentes serão validados naqueles valores, se necessário. Um componente que necessita de validação deve fornecer a implementação da lógica de validação.
Atualizar Valores do Modelo: alcança-se essa fase após todos os componentes serem validados. Nesta fase são atualizados os dados do modelo do aplicativo. Na página em que foi criada para enviar um texto, a informação digitada foi armazenada no Managed Bean durante esta fase.
Invocar Aplicação: durante esta fase, a implementação JSF manipula quaisquer eventos do aplicativo, tal como enviar um formulário ou ir a outra página através de um link. Estes eventos são ações que retornam geralmente uma string que está associada a uma navegação no qual se encarrega de chamar a página determinada.
Renderizar Resposta: esta é a fase final, ao qual é renderizada a página. Se este é um pedido inicial para esta página, os componentes são acrescentados à apresentação neste momento. Se este é um postback, os componentes já foram acrescidos à apresentação. Se há mensagens de conversão ou erros de validação e a página contém um ou mais componentes ou um componente , estes serão exibidos.

Referências

http://www.guj.com.br/content/articles/jsf/jsf.pdf
http://www.edsongoncalves.com.br/tag/javaserver-faces/
http://docs.oracle.com/javaee/6/tutorial/doc/bnacj.html#bnacp
http://www.slideshare.net/JorgeWilliamRodrigues/introduo-a-jsf