Esse artigo faz parte da revista Java Magazine edição 03. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.imagem_pdf.jpg

JavaServer Faces

Criação visual de interfaces web

Nesta edição vamos falar sobre uma das mais esperadas especificações da plataforma Java, Java Server Faces (JSR-127). A JSF está na reta final – a versão public draft foi lançada em agosto desse ano e já está disponível uma implementação de referência early access.

Produtividade

Um dos grandes gargalos de produtividade no desenvolvimento de aplicações web é a construção da camada de apresentação, normalmente implementada em HTML com servlets e JSPs. A maioria dos sistemas segue a mesma linha: uma variação da tradicional arquitetura Model-View-Controller (MVC) – servlets processam a requisição, classes de negócio executam as regras e páginas JSP apresentam o resultado.

Porém, normalmente muito pouco do código de apresentação pode ser reutilizado entre aplicações – e às vezes nem dentro da mesma aplicação. O fato é que a criação da interface HTML e da lógica de apresentação ainda segue um processo um pouco rudimentar, sem o apoio ferramental que os programadores poderiam ter. Imagine criar aplicações Swing sem ferramentas para desenhar a interface e tendo que implementar componentes que ficam mais complexos a cada projeto – é basicamente isso que fazemos em aplicações web!

As tecnologias da camada web têm evoluído bastante para suprir a demanda por maior produtividade. Um bom exemplo são as bibliotecas de tags JSP, que reduzem a quantidade de linhas de código Java nas páginas JSP, facilitando o reuso de código. Um conjunto dessas bibliotecas desenvolvidas pelo grupo Apache foi adotado como a JSR-52 e lançado recentemente como a JSTL 1.0 (JSP Standard Tag Library) – uma biblioteca de tags padronizada incorporada à tecnologia JSP.

Também já existe uma quantidade razoável de frameworks para a camada web, entre eles Apache Struts, WebWork e JATO. Estes auxiliam os programadores web a desenvolver o controle de fluxo da interface e implementar o modelo MVC. Além disso, muitas empresas chegaram a desenvolver sua própria solução caseira, já que essas dificuldades são comuns.

Cada framework tem seu próprio modelo, apesar de vários serem bastante parecidos. O JavaServer Faces vem para colocar ordem na construção desses frameworks e promete aumentar a produtividade na programação web.

Padronização

Um objetivo importante do JSF é reduzir o esforço necessário para criar páginas JSP com processamento feito por servlets, mas esse não é o único cenário suportado. A especificação visa facilitar e padronizar a criação de componentes de interfaces gráficas na internet, sejam eles desenhados em HTML, WAP, XML ou outras tecnologias similares. A idéia é permitir a criação de bibliotecas reusáveis desses componentes.

Outro ponto importante é fazer surgir uma série de ferramentas de apoio para facilitar o trabalho do desenvolvedor. O JSF está sendo arquitetado de forma a criar um ambiente ideal para o surgimento de ferramentas. Mais um objetivo do JSF é permitir que programadores não capacitados na programação orientada a objetos, possam utilizar Java para criar sistemas para a web – basicamente selecionando uma ação para um determinado componente e escrevendo a rotina que a implementa com apoio de uma ferramenta.

O framework

O JSF é composto basicamente por um mecanismo para mapear dados vindos do cliente em componentes no servidor, controlar o fluxo da aplicação, e armazenar estado entre as requisições.

Além disso, foi criada uma API para a manipulação de componentes e controle de aplicações JSF. Mas é interessante observar que o objetivo é que boa parte da API seja utilizada pelas ferramentas de desenvolvimento, e que o programador se concentre na parte de mais alto nível.

O JSF se baseia nas versões 2.3 e 1.2 das APIs de servlets e JSP, respectivamente. Além disso, a JSLT 1.0 também é utilizada pelo mecanismo, que também tem sua própria biblioteca de tags para facilitar a integração com JSP (veja a Figura 1).

Ciclo de vida

O framework JSF procura resolver problemas comuns da programação web, tais como: processamento de formulários, tratamento de eventos, conversão de tipos, tratamento de erros, gerenciamento de estado, validação de dados e internacionalização. A API e as tags criadas são voltadas para a solução desses problemas, que são abordados durante um ciclo de vida de atendimento à requisição.

O ciclo de vida de atendimento a uma requisição é composto por sete fases (veja a Figura 2). Cada fase tem um papel bem definido e pode alterar o fluxo da requisição.

Reconstitute Request Tree. Na primeira fase, as informações sobre quais componentes são utilizados no servidor são reconstituídas a partir dos parâmetros recebidos na requisição e de informações armazenadas na sessão do usuário. As informações são representadas na forma de uma Request Component Tree – uma espécie de árvore de componentes.

Apply Request Values. Após montar a árvore de componentes, o JSF percorre cada componente e solicita que cada um obtenha para si os dados relevantes, a partir dos parâmetros da requisição – é como se cada componente se atualizasse com valores contidos na requisição.

...

Quer ler esse conteúdo completo? Tenha acesso completo