Passo a Passo para o mundo de JavaServer Faces – Parte 01

 

Por: Eduardo Bregaida

Este artigo foca em utilizar recursos para desenvolvimento Web na tecnologia Java, muitas pessoas acabam se deparando com um absurdo de frameworks e na hora de escolher é uma dificuldade, temos basicamente dois tipos de frameworks, aqueles que se baseiam em Ações, como o Struts 1 e 2, WebWork, Vraptor, dentre outros e temos os que se baseiam em componentes como o JavaServer Faces, Click, Wicket e mais alguns que estão surgindo a cada dia.

Por onde o desenvolvedor iniciante deve começar? Qual é o melhor?

Os Action Baseds ainda são muito encontrado nas empresas, no caso o mais famoso deles o Struts 1.x.x, ainda existem inúmeros sistemas legados que utilizam este framework, a maior dificuldade do iniciante é descobrir como desenvolver em cima do framework.

Por exemplo:

Struts, o desenvolvedor deve saber que tem que criar um bean, um form, uma página, que o form é que faz a comunicação entre suas regras de negócio e a página, saber todas as burocracias do Struts para navegação, comunicação e afins, isto é muito difícil, ainda mais para alguem que acabou de conhecer a tecnologia.

Os frameworks baseados em componentes, vieram para simplificar isto, já que o desenvolvedor tem em mente algo como Desktop, eventos simples, faceis de tratar, tendo preocupação na regra de negócio do cliente e não em validadores de tela e preocupações para manter estado dos objetos do formulário que se perdem, a curva de aprendizado é muito maior, simples e produtiva com os frameworks baseados em componentes, tornando o desenvolvedor livre de preocupações com telas.

Nota: O Apache Wicket também, é um ótimo componente based e vale a pena você dar uma analisada.


Neste artigo abordarei passo a passo o desenvolvimento de um sistema CRUD (Create, Retrieve , Update, Delete), ou seja, um sistema bem básico, a idéia é o desenvolvedor conseguir a partir do exemplo, ter a idéia de como funciona a fundo o framework e como utiliza-lo no seu dia-a-dia, o framework escolhido foi o JSF (JavaServer Faces), com implementação do Apache Tomahawk, utilizando JPA e Hibernate, com banco de Dados MySQL.

JSF – JavaServer Faces

O JavaServer Faces ou JSF é um framework MVC é uma especificação SUN, mantida pelo
Java Community Process (JCP), o que garante ao desenvolvedor que a SUN manterá este framework presente em suas versões futuras.

Um grande problema enfrentado hoje no desenvolvimento web são as características stateless do HTTP, isto é, a cada nova requisição, o servidor não sabe em que ponto está a comunicação com o cliente, seria neste ponto o papel de sessões e cookies.

A cada requisição o JSP recria os formulários, e o desenvolvedor de alguma forma deve repopular todo o mesmo, para não perder os dados que ficaram para trás.

Pensando em algo como aplicações Desktop surge o JSF, algo simples, que mantém o estado da página e os dados não são perdidos, uma aplicação Desktop possui eventos e neste ponto que é o interessante, tratar estes eventos.

O JSF encapsula a complexidade de criação de interfaces ricas, “escondendo” uma grande parte de códigos HTML, JavaScript e CSS e fornecendo assim uma forte ferramenta de fácil entendimento, esta é a motivação do JSF, um desenvolvimento baseado em componentes, a idéia do JSF já existia a algum tempo no ASP.NET da Microsoft, mas não abordaremos neste artigo.

Como JSF é uma especificação da-se a necessidade de ter uma implementação, no nosso caso o MyFaces do grupo Apache, porém existem diversas outras implementações como o RichFaces,
ICEfaces, dentre outras, hoje encontramos frameworks que encapsulam o JSF como o caso do JBoss Seam.

Vantagens de utilizar o JSF:
        

  • Suporte a internacionalização;
  • Facilita criação de telas;
  • Facilita a transferência dos dados entre telas e camadas de negócio através da EL;
  • Produtividade para conversores recebidos do formulário para os tipos nas classes;
  • Flexibilidade para renderização;
  • Criar modelos simples de eventos entre interfaces gráficas e as classes no servidor;
  • Mecanismos produtivos para validação de campos na tela;
  • Facilidade para criação de componentes;
  • Facilidade em customizações:

  • Validadores;
  • Conversores;
  • Componentes de Interface;
  • Renderizadores;
  • Mensagens;

 

Para dar início o desenvolvedor iniciante deve entender algumas coisas como:


Managed Beans ou Backing Bean.

O Managed Bean é uma classe que expões objetos de negócio para a camada de apresentação, são registrador no faces-config.xml, são objetos que sofrerão alterações em seus atributos durante uma requisição (uma chamada de um command por exemplo), serão utilizados na camada de apresentação através da EL (Expression Language), imagine as Actions do Struts, porém os Form Beans serão injetados por setters dentro do seu próprio Bean.

EL (Expression Language)

É uma poderosa linguagem de expressão (linguagem de navegação) para acessar propriedades dos beans e coleções, quando ocorrer uma requisição pelo browser é preenchido dinamicamente pelos elementos da página pela camada de negócio, quando a página for submetida, ocorre a modificação no estado da camada de negócio.

O próximo passo é entender o ciclo de vida do JSF como está na Figura 1.

pb_30_10_09_pic01.JPG
Figura 1

Fases:

São atendidas pelo Reader Response e o Restore Component Tree.

Restore Component Tree: O conjunto de componentes JSF é criado ou restaurado dependendo da requisição (Primeira ou demais vezes executadas)

pb_30_10_09_pic02.JPG

Apply request Values: Os componentes irão extrair seu novo valor dos parâmetros da Request, colocando-os em variáveis de estado no servidor.

pb_30_10_09_pic03.JPG

Process Validations: todos os validadores serão executados, em caso de erro de qualquer valor, a mensagem é alocada no FacesContext, caso contrário ele atualiza (Update Model Values) os valores dos inputs na camada de negócio através da EL.

pb_30_10_09_pic04.JPG

Invoke Application: Os métodos do Managed Beans são executados e as regras de navegação (Gravar, Excluir, Alterar,...) são resolvidas, se tudo ocorrer bem é renderizada pelo container do JSP, caso contrario as mensagens
gravadas no FacesContext são apresentadas.

pb_30_10_09_pic05.JPG