Escolar Documentos
Profissional Documentos
Cultura Documentos
Faces (JSF)
Especicao/IDE/Implementao
Esse
curso
foi
preparado
em
03/2015
usando
a
seguinte
especicao,
IDE
e
implementao
Especicao
JavaServer
Faces
2.2
(05/2013,
JEE
7)
JavaServer
Faces
2.1
(11/2010)
JavaServer
Faces
2.0
(07/2009,
JEE
6)
IDE
JDK
8u40
NetBeans
8.0.2
na
distribuio
Java
EE
Implementao
Leonardo Murta
JSP
Agenda
O
que
JSF?
JavaBeans
Navegao
Tags
JSF
Converso
de
dados
Validao
de
dados
JSF
com
AJAX
Templates
Leonardo Murta
JSP
O
que
JSF?
Um
framework
para
a
camada
de
apresentao
Visa
promover
uma
separao
clara
entre
comportamento
e
apresentao
Apresentao
Leonardo Murta
Web
Designer
Programador
JSP
Comportamento
Principais
componentes
Facelets
(pginas
XHTML)
So
automafcamente
instanciados
Armazenam
os
dados
usados
para
ler
e
escrever
os
campos
das
pginas
Tags
Metadados
Conguram
a
aplicao
Podem
ser
tanto
anotaes
quanto
XML
Leonardo Murta
JSP
Principais
componentes
Programador
Tags
JavaBeans
Web
Designer
Facelets
Leonardo Murta
JSP
Leonardo Murta
JSP
Leonardo Murta
JSP
Leonardo Murta
JSP
Leonardo Murta
JSP
10
Leonardo Murta
JSP
11
Leonardo Murta
JSP
12
Leonardo Murta
JSP
13
O
que
aconteceu?
Foram
basicamente
criados
dois
arquivos
Descritor
(WEB-INF/web.xml)
Facelet
(index.xhtml)
Leonardo Murta
JSP
14
Descritor
criado
...
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</
servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
...
Leonardo
Murta
JSP
15
Descritor
criado
...
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</
servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
...
Leonardo
Murta
JSP
Implcito
em
JSF
2.0
ou
superior
16
Facelet
criado
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>Hello from Facelets</h:body>
</html>
Leonardo Murta
JSP
17
Leonardo Murta
JSP
18
O
que
aconteceu?
Servidor
Cliente
hmp://localhost:8080/alomundo/
HTML
Leonardo Murta
JSP
Facelet
19
Model-View-Controller
(MVC)
O
JSF
implementa
o
esflo
MVC,
separando
as
responsabilidades
da
aplicao
Model:
JavaBeans
View:
Facelets
Controller:
FacesServlet
Leonardo Murta
JSP
20
JavaBeans
So
representaes
OO
das
enfdades
manipuladas
nos
Facelets
Facelet
JavaBean
PessoaBean
Nome:
-
String
:
nome
-
String
:
endereco
-
String
:
telefone
Endereo:
Telefone:
Leonardo Murta
JSP
21
JavaBeans
Os
JavaBeans
usados
pelo
JSF
so
especiais,
pois
tm
seus
ciclos
de
vida
gerenciados
pelo
container
Tambm
so
chamados
de
Managed
Beans
ou
Backing
Beans
JSP
22
Nome
do
Bean
Denido
como
anotao
no
Bean
@Named(nome)
Leonardo Murta
JSP
23
Leonardo Murta
JSP
24
@RequestScoped
@SessionScoped
@ApplicafonScoped
Leonardo Murta
JSP
25
@ConversafonScoped
@FlowScoped
Leonardo Murta
JSP
26
@Dependent
O
escopo
denido
pelo
escopo
do
componente
que
usa
o
bean
Exemplo:
Bean
de
converso
de
moedas,
que
pode
ser
usado
sozinho
ou
dentro
de
um
carrinho
de
compras
JSP
27
JSP
28
Criando um Bean
Leonardo Murta
JSP
29
Criando um Bean
Leonardo Murta
JSP
30
Criando um Bean
Leonardo Murta
JSP
31
Bean
criado
package br.uff.ic.alomundo;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
@Named
@RequestScoped
public class PessoaBean {
public PessoaBean() {
}
}
Leonardo Murta
JSP
32
Leonardo Murta
JSP
33
JSP
34
O
que
aconteceu?
Servidor
Cliente
HTML
Leonardo Murta
JSP
Facelet
Bean
35
Navegao
A
navegao
entre
pginas
pode
ser
feita
de
duas
maneiras
Navegao
direta:
o
mtodo
acionado
retorna
a
pgina
que
deve
ser
aberta
Navegao
indireta:
o
mtodo
acionado
retorna
um
rtulo
e
o
XML
de
congurao
vincula
o
rtulo
a
uma
pgina
Leonardo Murta
JSP
36
Navegao
direta
No
Facelet
<h:commandButton value="Salva"
action="#{agendaBean.cadastra(contatoBean)}">
No
Bean
public String cadastra(ContatoBean contatoBean) {
...
return "listagem.xhtml";
}
Leonardo Murta
JSP
37
Navegao
direta
No
Facelet
<h:commandButton value="Salva"
action="#{agendaBean.cadastra(contatoBean)}">
No
Bean
public String cadastra(ContatoBean contatoBean) {
...
return "listagem.xhtml";
Se
no
fver
ac,on
no
}
Facelet
ou
retorno
no
Bean,
o
JSF
acionar
a
pgina
de
origem
novamente!
Leonardo Murta
JSP
38
Navegao
indireta
No
Facelet
<h:commandButton value="Salva"
action="#{agendaBean.cadastra(contatoBean)}">
No Bean
No faces-cong.xml
<navigation-rule>
<from-view-id>cadastro.xhtml</from-view-id>
<navigation-case>
<from-outcome>cadastrado</from-outcome>
<to-view-id>listagem.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Leonardo
Murta
JSP
39
Exerccio
Criar
uma
aplicao
usando
JSF
para
somatrio,
onde
o
valor
inicial
e
o
valor
nal
so
informados
Informar
o
nmero
de
vezes
que
O
usurio
acessou
o
servio
na
mesma
sesso
Todos
os
usurios
acessaram
o
servio
desde
quando
o
servidor
entrou
no
ar
Leonardo Murta
JSP
40
Tags
JSF
At
ento,
vimos
a
tag
h:inputText
e
h:commandBu<on
de
forma
intuifva
Contudo,
o
JSF
disponibiliza
diversas
colees
de
tags,
para
diferentes
propsitos
necessrio
declarar
a
coleo
de
tags
que
ser
usada
e
um
prexo
para
representar
a
coleo
<html xmlns:prefixo=URI da coleo de tags">
Leonardo Murta
JSP
41
Tags
JSF
(colees
de
tags)
Prexo
padro:
h
URI:
hmp://xmlns.jcp.org/jsf/html
Templates
Prexo
padro:
ui
URI:
hmp://xmlns.jcp.org/jsf/facelets
Core
Prexo
padro:
f
URI:
hmp://xmlns.jcp.org/jsf/core
Controle
de
uxo
Manipulao
de
strings
Leonardo Murta
JSP
42
Tags
<h:form>
Exemplo
<h:form>
...
</h:form>
Leonardo Murta
JSP
43
Tag
<h:commandButton>
Exemplo
<h:commandButton value="Submit"
action="#{pessoaBean.cadastra}" />
Leonardo Murta
JSP
44
Tag
<h:commandLink>
Exemplo
<h:commandLink value="Leia mais..."
action="leia.xhtml" />
Leonardo Murta
JSP
45
Tags
<h:dataTable>
<h:column>
<f:facet>
Exemplo
JSP
46
Tags
<h:graphicImage>
Exemplo
Leonardo Murta
JSP
47
Tags
<h:inputText>
<h:inputTextarea>
<h:inputSecret>
Exemplo
Leonardo Murta
JSP
48
Tags
<h:selectBooleanCheckbox>
Exemplo
<h:selectBooleanCheckbox
value="#{usuarioBean.ativo}" />
Leonardo Murta
JSP
49
Tags
<h:selectOneMenu>
Exemplo
<h:selectOneMenu value="#{corBean.opcao}">
<f:selectItem itemValue="red" itemLabel="Red" />
<f:selectItem itemValue="blue" itemLabel="Blue" />
<f:selectItem itemValue="green" itemLabel="Green" />
</h:selectOneMenu>
Leonardo
Murta
JSP
50
Tags
<h:selectOneRadio>
Exemplo
<h:selectOneRadio value="#{corBean.opcao}">
<f:selectItem itemValue="red" itemLabel="Red" />
<f:selectItem itemValue="blue" itemLabel="Blue" />
<f:selectItem itemValue="green" itemLabel="Green" />
</h:selectOneRadio>
Leonardo
Murta
JSP
51
Tags
<h:selectOneListbox>
Exemplo
<h:selectOneListbox value="#{corBean.opcao}">
<f:selectItem itemValue="red" itemLabel="Red" />
<f:selectItem itemValue="blue" itemLabel="Blue" />
<f:selectItem itemValue="green" itemLabel="Green" />
</h:selectOneListbox>
Leonardo
Murta
JSP
52
Tags
<h:selectManyCheckbox>
Exemplo
<h:selectManyCheckbox value="#{corBean.opcoes}">
<f:selectItem itemValue="red" itemLabel="Red" />
<f:selectItem itemValue="blue" itemLabel="Blue" />
<f:selectItem itemValue="green" itemLabel="Green" />
</h:selectManyCheckbox>
Leonardo
Murta
JSP
53
Tags
<h:selectManyMenu>
<h:selectManyListbox>
Exemplo
<h:selectManyMenu value="#{corBean.opcoes}">
<f:selectItem itemValue="red" itemLabel="Red" />
<f:selectItem itemValue="blue" itemLabel="Blue" />
<f:selectItem itemValue="green" itemLabel="Green" />
</h:selectManyMenu>
Leonardo
Murta
JSP
54
Tags
<h:messages>
Exemplo
Leonardo Murta
JSP
55
Exerccio
Faa
uma
aplicao
em
JSF
de
agenda
eletrnica
Cadastrar
nome,
sexo,
telefone
e
aniversrio,
todos
como
String
por
enquanto
Listar
em
uma
tabela
todos
os
registros
Leonardo Murta
JSP
56
Validao
Leonardo Murta
JSP
57
Converso
de
dados
A
converso
feita
de
forma
automfca
para
os
fpos
principais
da
linguagem
declarados
no
Bean
possvel
congurar
a
converso
Exemplos
<h:inputText value="#{livroBean.preco}">
<f:convertNumber currencySymbol="R$" type="currency"/>
</h:inputText>
<h:inputText value="#{livroBean.dataPublicacao}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText>
<h:inputText value="#{livroBean.devolucoes}">
<f:convertNumber type="percent" />
</h:inputText>
Leonardo
Murta
JSP
58
Converso
Customizada
possvel
customizar
a
converso
para
um
fpo
especco
de
objeto
Implementar
a
interface
javax.faces.convert.Converter
<f:converter converterId="nomeDaClasse"/>
Leonardo
Murta
JSP
59
Validao
de
dados
Serve
para
assegurar
que
os
dados
entrados
esto
aderentes
ao
esperado
Necessitam
interao
com
o
servidor
Uma
alternafva
usar
em
conjunto
com
JavaScript
Leonardo Murta
JSP
60
Exemplo
<h:inputText value="#{UsuarioBean.nome}"
validatorMessage="O campo nome obrigatrio.">
<f:validateRequired />
</h:inputText>
Leonardo Murta
JSP
61
Exemplo
<h:inputText value="#{usuarioBean.login}"
validatorMessage="Login deve ter de 5 a 8
caracteres">
<f:validateLength minimum="5" maximum="8"/>
</h:inputText>
Leonardo
Murta
JSP
62
Exemplo
<h:inputText value="#{usuarioBean.idade}"
validatorMessage="Idade deve ser entre 18 e 70 anos">
<f:validateLongRange minimum="18" maximum="70"/>
</h:inputText>
Leonardo Murta
JSP
63
Exemplo
<h:inputText value="#{usuarioBean.celular}"
validatorMessage="Celular invlido">
<f:validateRegex pattern="^(\+[0-9]{2})?\
([0-9]{2}\)9?[0-9]{4}\-[0-9]{4}$" />
</h:inputText>
Leonardo Murta
JSP
64
Propsito
( )
[ ]
{m,n}
a|b
Caractere de escape
Leonardo Murta
JSP
65
Validao
Customizada
possvel
customizar
a
validao
dos
valores
de
um
campo
Implementar
a
interface
javax.faces.validator.Validator
void
validate(FacesContext
context,
UIComponent
component,
Object
value)
JSP
66
Tamanho do campo
Data
no
passado
ou
no
futuro
@NotNull
@Size
@DecimalMax
@Max
@Past
@Future
Expresso regular
@DecimalMin
@Min
Leonardo Murta
@Pamern
JSP
67
Exerccio
Revisite
o
exerccio
anterior
incluindo
as
validaes
apropriadas
para
cada
campo
Leonardo Murta
JSP
68
JSP
69
Leonardo Murta
JSP
70
Leonardo Murta
JSP
71
Exerccio
Revisite
o
exerccio
anterior
fazendo
com
que
a
lista
de
contatos
atualize
via
AJAX
Leonardo Murta
JSP
72
Uso
de
Templates
Com
JSF
possvel
criar
uma
pgina
que
tenha
o
layout
da
aplicao
Todas
as
demais
pginas
iro
fazer
uso
desse
layout
Leonardo Murta
JSP
73
Uso
de
Templates
(layout.xhtml)
...
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://
xmlns.jcp.org/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/
facelets">
<h:head>
<title>
<ui:insert name="title">Ttulo Padro</ui:insert>
</title>
</h:head>
<h:body>
<h1><ui:insert name="title">Ttulo Padro</ui:insert></h1>
<hr/>
<ui:insert name="content">Contedo Padro</ui:insert>
<hr/>
</h:body>
</html>
Leonardo Murta
JSP
74
Uso
de
Templates
(pgina
que
usa
o
layout)
...
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/
facelets" xmlns:h="http://xmlns.jcp.org/jsf/html"
template="./layout.xhtml">
<ui:define name="title">Create a new book</ui:define>
<ui:define name="content">
<h:form>
<h:outputLabel value="Nome: "/>
<h:inputText value="#{usuarioBean.nome}"/>
...
<h:commandButton value="Cadastrar"
action="#{usuarioBean.cadastra}"/>
</h:form>
</ui:define>
</ui:composition>
Leonardo
Murta
JSP
75
Exerccio
Revisite
o
exerccio
anterior
para
fazer
uso
de
um
layout
padro
Coloque
no
cabealho
o
nome
da
universidade,
curso
e
disciplina
Coloque
no
rodap
seu
nome
Leonardo Murta
JSP
76
Bibliograa
Java
EE
7
Tutorial,
Eric
Jendrock,
Ricardo
Cervera-Navarro,
Ian
Evans,
Kim
Haase,
William
Markito
Java
EE
7:
The
Big
Picture,
Danny
Coward
Java
EE
7
Recipes,
Josh
Juneau
Beginning
Java
EE
7,
de
Antnio
Gonalves
Leonardo Murta
JSP
77