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.
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)
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.
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.
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.