1. Desenvolvimento Web com Java Server
Faces
Bruno Balint de Andrade
http://www.arquiteturadesistemas.com.br
1
2. AGENDA
Apresentação
Histórico Desenvolvimento Web com Java
O que é JSF?
Porque usar JSF?
Conceitos JSF
Exercícios com JSF 1.2 (RichFaces,MyFaces)
Novos Recursos do JSF 2
Exercícios com JSF2 (PrimeFaces)
http://www.arquiteturadesistemas.com.br
2
3. JSF
Apresentação
Bruno Balint de Andrade - Consultor de Sistemas
7 anos desenvolvendo com Java
Certificações Java : OCJA , SCJP, OCWCD
http://www.arquiteturadesistemas.com.br
3
5. JSF
Desenvolvimento Web
Aplicações web tornam-se mais e mais importantes no nosso mercado
Maior complexidade para desenvolver
•
•
•
•
•
•
Javascript
CSS
Ajax
Validação
Efeitos, usabilidade
Etc
Exigência mais elevada do cliente durantes os anos
•
•
Interfaces ricas (fácil de usar)
Prazos cada vez mais curtos
http://www.arquiteturadesistemas.com.br
5
10. JSF
Surgiram diversos frameworks MVC baseado no Model 2
Struts 1 e 2
Spring MVC
Tapestry
E muitos outros...
•
E ainda continuam surgindo mais
http://www.arquiteturadesistemas.com.br
10
11. JSF
Surgiram diversos frameworks MVC baseado no Model 2(Problemas)
Ainda assim continuavamos com alguns problemas
•
A plataforma Java não nos fornecia recursos para desenvolver aplicações
web com produtividade
•
•
•
Tinhamos dificuldade para integrar diversos frameworks
Falta de um padrão para um framework Web na platafoma Java
Ausência de uma API padrão para um framework Web
http://www.arquiteturadesistemas.com.br
11
12. JSF
E a solução foi?
JAVA SERVER FACES
http://www.arquiteturadesistemas.com.br
12
13. JSF
Mas o que é JAVA SERVER
FACES?
http://www.arquiteturadesistemas.com.br
13
14. JSF
JavaServer Faces é:
… uma especificação
JSR 127 (JSF 1.0 e JSF 1.1) – 2004
JSR 252 (JSF 1.2) – 2006 (JAVA EE 5)
JSR 314 (JSF 2.0 e 2.1) – 2008 (JAVA EE 6 e JAVAEE 7)
… um framework MVC
… um framework baseado em componentes de interface com o usuário
… um framework dirigido a eventos
… padrão de mercado
… RAD (Rapid Application Development)
http://www.arquiteturadesistemas.com.br
14
15. JSF
JavaServer Faces é:
… um framework MVC
Um conjunto de APIs para:
Representar
componentes
UI
e
gerenciar
os
estados
destes
componentes
Manipular eventos e validação de entrada do usuário
Dar suporte a internacionalização e acessibilidade
Um conjunto de tags JSP para representar componentes JSF em uma
página JSP
http://www.arquiteturadesistemas.com.br
15
16. JSF
JavaServer Faces é:
… um framework baseado em componentes de interface com
o usuário
Construído sob o conceito de componentes
Os componentes são a base para construção da interface com o usuário
Existem componentes padrões equivalentes a quase todas as tags HTML e
diversos componentes auxiliares
http://www.arquiteturadesistemas.com.br
16
17. JSF
JavaServer Faces é:
… um framework baseado em componentes de interface com
o usuário
Existem diversas bibliotecas de componentes disponíveis comerciais e
open sources
Os componentes são expressos através de tags numa página JSP e
posteriormente transformados em HTML
http://www.arquiteturadesistemas.com.br
17
18. JSF
JavaServer Faces é:
… um framework dirigido a eventos
Possui um modelo para manipulação de eventos
Componentes geram determinados eventos
Efetua uma chamada à um método (ação no servidor)
O estado da aplicação web muda devido a um evento disparado pelo
usuário
Um evento pode ser um click de um botão, focar sobre um input ou
mesmo alterar o valor de uma combo-box
http://www.arquiteturadesistemas.com.br
18
19. JSF
JavaServer Faces é:
… um padrão de mercado
JAVA EE 5,6,7
Suporte a big players:
Sun,Apache,Oracle,IBM,BEA,JBoss,Borland etc
IDEs (Netbeans,Eclipse, Jdeveloper,etc)
Implementações (Sun,Apache,IBM,Oracle, …)
Conjunto de Componentes (RichFaces,PrimeFaces,Apache MyFaces,...)
http://www.arquiteturadesistemas.com.br
19
21. JSF
Porque usar JavaServer Faces?
É um padrão de mercado
Presente nas especificações JAVA EE 5,6,7
Fácil de usar, e produtivo também
Abstração para desenvolvimento de aplicações Web
Modelo de programação dirigido a eventos (oposto ao modelo HTTP
request/response)
Baixa de curva de aprendizagem
Componentes já prontos
http://www.arquiteturadesistemas.com.br
21
25. JSF
Porque usar JavaServer Faces?
Suporte cross-browser
Segurança
Cross-site scripting, session hijacking
OWASP(Open Web Application Security Project)
Grande atividade da comunidade em fóruns, listas de discussão, blogs,
portais, revistas etc.
Integração com diversos frameworks
Templating
Facelets, Sitemesh
JSF Templating, Tiles
http://www.arquiteturadesistemas.com.br
25
32. JSF
Adicionando as bibliotecas do JSF
Selecione o projeto e pressione alt+enter para acessar as propriedades do
projeto
http://www.arquiteturadesistemas.com.br
32
58. JSF
Conceitos chave do JSF
Componentes
Renderers
Managed-beans
Converters
Validators
Navegação
Ciclo de Vida(Request LifeCycle)
http://www.arquiteturadesistemas.com.br
58
59. JSF
Componentes
Separa a lógica de negócio da apresentação
Cada view é composta por uma hierarquia de componentes
http://www.arquiteturadesistemas.com.br
59
60. JSF
Componentes
• Componentes podem ser adicionados na view programaticamente ou
via template (JSP por default, ou Facelets para melhor desempenho
e fácil desenvolvimento)
• Componentes são expressos em tags em uma página JSP e em sua
maioria são de interface com o usuário
• Os componentes padrões são divididos em dois grupos
Faces Core <f:view>, <f:loadBundle>, <f:param>
HTML wrappers <h:dataTable>, <h:selectOneMenu>
http://www.arquiteturadesistemas.com.br
60
61. JSF
Renderers
Responsável por exibir o componente no cliente
São agrupados em render kits
Efetua o encode (gera o HTML do componente)
Efetua o decode (seta o componente com os dados da URL query
string e do formulário )
Resumindo
<h:inputText id=“login” size=“16” />
<input type=“text” id=“myForm:login” name=“myForm:login” size=“16” />
http://www.arquiteturadesistemas.com.br
61
62. JSF
Exercício: Desenhe um formulário conforme a imagem abaixo.
Dica: para deixar componentes na mesma linha utilize os componentes
h:panelGrid com o atributo columns
http://www.arquiteturadesistemas.com.br
62
63. JSF
Managed Beans
Controllers, “Linkam” a view ao modelo
Funciona como representação da view
São acessadas via Expression Language (EL) na jsp
http://www.arquiteturadesistemas.com.br
63
65. JSF
Managed Beans
No JSF 1.2 , é necessário registrarmos um Managed Bean para que o
framework saiba que ele existe
Um Managed Bean é registrado (configurado) no arquivo de
configurações do JSF, faces-config.xml.
http://www.arquiteturadesistemas.com.br
65
66. JSF
Managed Beans
A configuração de um Managed Bean se resume basicamente ao
código abaixo:
http://www.arquiteturadesistemas.com.br
66
72. JSF
Exercício
Utilizando o formulário do exercício anterior, verificar no Managed
Bean
se
os
dados
foram
preenchidos
corretamente.
Utilizar System.out.println(<nome_atributo>) no método logar()
http://www.arquiteturadesistemas.com.br
72
73. JSF
Exercício
Criar um formulário de cadastro de endereço, com os seguintes
campos: Rua, Complemento, Cidade ,Bairro e CEP.
Utilizar o componente h:inputTextarea para representar o campo
“Complemento”
Criar o Managed Bean e dentro dele criar todos os campos a serem
referenciados nos componentes
Submeter o formulário e imprimir os valores no Console
http://www.arquiteturadesistemas.com.br
73
79. JSF
JSF EL
Semelhante ao JSTL porém usa-se #{} no lugar de ${}
Pode-se executar métodos no modelo através de expressões
Não é processada imediatamente como JSP EL
A partir da JSF 1.2 utiliza-se Unified Expression Language (JSP 2.1)
que resolve problemas de incompatibilidade entre a JSF-EL e JSP-EL
http://www.arquiteturadesistemas.com.br
79
86. JSF
Exercícios:
• Adicionar um atributo List (ArrayList) e inserir 5 elementos. Acessar o elemento
da última posição na lista
• Adicionar um atributo Map(HashMap) e inserir 5 elementos. Acessar o
elemento dado uma chave.
http://www.arquiteturadesistemas.com.br
86
87. JSF
Exercícios:
• Criar uma classes de modelo chamada Usuario com os atributos
(nome,sobrenome e idade), o construtor do bean deverá iniciar seus atributos.
Criar um Managed Bean chamado UsuarioBean que deverá ter um atributo do
tipo Usuario. Esse atributo deve ser inicializado no Construtor.
Ex: usuario = new Usuario(“bruno”,”andrade”,18)
• Criar dois componentes do tipo <h:outputText /> na página com os valores.
1. É maior de 18 anos
2. É menor de 18 anos
O primeiro deve ser exibido apenas se o usuario.idade >=18
O segundo deve ser exibido apenas se o usuario.idade <18
Dica: colocar uma condição no atributo rendered do componente visual.
Ex : #{usuarioBean.idade > 18}
http://www.arquiteturadesistemas.com.br
87
88. JSF
JSF EL(Bindings)
Em JSF nós temos 3 tipos de bindings:
Value Binding
Method Binding
Component Binding
http://www.arquiteturadesistemas.com.br
88
92. JSF
Exercício
Criar uma página com dois componentes, um input (HtmlInputText) e
um botão (HtmlCommandButton)(“OK”). Se o valor do input for maior que
1000, o nome do botão deve mudar para “tente novamente”
Altere o exercício anterior para desabilitar o botão caso o valor
entrado pelo usuário seja igual a 171
http://www.arquiteturadesistemas.com.br
92
94. JSF
Navegação
Navegação de uma página para outra
Simples e poderoso
Pode ser disparado através de um evento
Resultado (outcome) de uma Action
As regras de navegação são registradas no faces-config.xml
http://www.arquiteturadesistemas.com.br
94
96. JSF
É possível também navegar entre as páginas sem a necessidade de um
Managed Bean, de maneira estática:
http://www.arquiteturadesistemas.com.br
96
97. JSF
Na navegação do JSF, é possível utilizar wildcard(*) para páginas de
origem(from-view-id) :
http://www.arquiteturadesistemas.com.br
97
98. JSF
Exercício
Voltando ao formulário de login: Efetue uma lógica de autenticação
no método loginBean.logar() : Caso o login seja igual a senha entrada
pelo usuário, então você deve encaminha-lo para um página de
sucesso, caso contrário, limpe os campos e o usuário deve tentar logar
novamente na aplicação.
http://www.arquiteturadesistemas.com.br
98
101. JSF
Mensagens
São as mensagens de informação ou erro exibidas ao usuário da
aplicação. Qualquer parte da aplicação ( Managed Beans, Converters,
Validators etc) poderá gerar mensagens quando necessário
Basicamente existem dois tipos de mensagens de erro
Aplicação (lógica de negócios, banco de dados, conexão etc)
Inputs (conversão, validação de campos , etc)
http://www.arquiteturadesistemas.com.br
101
104. JSF
Exercícios
Voltando ao formulário de login: Adicione mensagens de erro aos
inputs de login, e torne-os obrigatórios.
Ainda no formulário de login, no método loginBean.logar() : Caso o
login seja diferente da senha entrada pelo usuário, exiba uma
mensagem de erro da aplicação.
http://www.arquiteturadesistemas.com.br
104
105. JSF
Converters
Tem por finalidade converter e/ou formatar objetos do tipo Java para
String e vice-versa
O JSF já nos fornece converters padrões para date / time , inteiros,
números e moeda.
O JSF nos permite implementar nosso próprio converter
http://www.arquiteturadesistemas.com.br
105
107. JSF
Exercício
Faça alguns testes com os converters padrões do JSF, utilize o artigo
que
está
no
diretório
do
treinamento(
converters.docx ).
http://www.arquiteturadesistemas.com.br
107
treinamento_jsf/artigos/
108. JSF
Implementando seu próprio converter
Devemos implementar a interface javax.faces.convert.Converter
Registar nosso converter no faces-config.xml
Informar ao componente JSF qual converter utilizar
http://www.arquiteturadesistemas.com.br
108
109. JSF
Implementando seu próprio converter: Exemplo
http://www.arquiteturadesistemas.com.br
109
lwww.primeinformatica.com.br
110. JSF
Implementando seu próprio converter: Exemplo : facesconfig.xml – Mapeando o Converter
Aplicando o Converter em um componente:
http://www.arquiteturadesistemas.com.br
110
112. JSF
Exercício
Implementar um converter que formate um CPF entrado pelo
usuário, ou seja, formatar um CPF como “646557720321” entrado pelo
usuário para “646.577.203-21” por exemplo.
Dica: Utilizar a classe NumberFormat
http://www.arquiteturadesistemas.com.br
112
114. JSF
Validators
Tem a responsabilidade de garantir que o valor entrado pelo
usuário seja válido
Você pode validar tantos objetos como Strings
O JSF já nos fornece validadores padrões como required, length e ranges
O JSF nos permite implementar nosso próprio validador.
http://www.arquiteturadesistemas.com.br
114
116. JSF
Validators
Devemos implementar a interface javax.faces.validator.Validator
Registrar o nosso validador no faces-config.xml.
Informar ao componente qual validador utilizar
http://www.arquiteturadesistemas.com.br
116
117. JSF
Exemplo :Validator
Criação de um validador que impede o envio de caracteres especiais para um
atributo.
http://www.arquiteturadesistemas.com.br
117
lwww.primeinformatica.com.br
118. JSF
Exemplo :Validator
Criação de um validador que impede o envio de caracteres especiais para um
atributo. faces-config.xml
http://www.arquiteturadesistemas.com.br
118
119. JSF
Exemplo :Validator
Criação de um validador que impede o envio de caracteres especiais para um
atributo. Utilizar a tag <f:validator> para vincular o validador a um componente.
http://www.arquiteturadesistemas.com.br
119
120. JSF
Exercícios:
Implementar um validador que não permita que uma data entrada pelo usuário seja
maior que a data atual
Implementar um validador que valide se o usuário entrou com um email válido
http://www.arquiteturadesistemas.com.br
120
122. JSF
Eventos e Listeners
O JSF usa o modelo JavaBeans event/listener (também utilizado no Swing).
Componentes geram eventos, e listeners podem ser registrados para manipular esses
eventos
Os listeners mais comuns do JSF são:
Value-change listener
Action Listener
http://www.arquiteturadesistemas.com.br
122
123. JSF
Eventos e Listeners – Exemplo Value Change Listener
http://www.arquiteturadesistemas.com.br
123
125. JSF
Exercício
• Criar um componente do tipo <h:inputText> para armazenar um nome e um
botão do tipo <h:commandButton>. Caso o usuário digite um nome com mais de
8 caracteres , o botão deve ser habilitado, caso contrário o mesmo deve ser
desabilitado. Utilize o evento valueChangeListener para fazer essas verificações
http://www.arquiteturadesistemas.com.br
125
126. JSF
Plus: Detalhando os escopos do JSF 1.2
• Request Scope: todos os objetos armazenados no escopo
request, sobrevivem apenas a uma submissão ao ciclo de vida do
JSF. Exemplo:
A cada requisição é
criada uma nova
instância do bean
http://www.arquiteturadesistemas.com.br
126
127. JSF
Plus: Detalhando os escopos do JSF 1.2
• Session Scope: todos os objetos e atributos vinculados ao
ManagedBean, sobreviverão durante toda a sessão do usuário. A
sessão é definida pelo vinculo do navegador do usuário com o
servidor. Desta forma, se o usuário abrir dois navegadores, ele
estará criando duas sessões com o servidor.Exemplo:
A cada sessão é criada
uma nova instância do
bean
http://www.arquiteturadesistemas.com.br
127
128. JSF
Plus: Detalhando os escopos do JSF 1.2
• Application Scope: tudo armazenado neste escopo permanece
enquanto a aplicação estiver executando e é compartilhado entre todos os
usuários. É recomendado sempre que for necessário guardar informações
que podem ser utilizada por diversas partes da aplicação como parâmetros
e também implementar funcionalidades para prover comunicação entre
usuários. Exemplo:
É criado apenas uma
instância do bean na
Aplicação
http://www.arquiteturadesistemas.com.br
128