Beruflich Dokumente
Kultur Dokumente
Globalcode open4education
Objetivo
Globalcode open4education
Apresentao da Agenda
Introduo
Arquitetura do JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
Globalcode open4education
Agenda
Introduo
Arquitetura do JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
Globalcode open4education
Histrico
Tecnologias de Apresentao
Contedo Esttico
HTTP
HTML + Javascript + CSS + DOM
Contedo Dinmico
CGI
Servlets
JSP
Classical Custom Tags
Tag Files e Simple Tags
Apache Struts
Web 2.0
Globalcode open4education
Por qu JSF?
Motivao
MVC tornou-se um padro de mercado (inmeros frameworks);
As interfaces grficas exigidas so muito complexas para
serem desenvolvidas somente com HTML exigindo muito
JavaScript;
Muitos componentes de UI sendo desenvolvidos com
Custom Tags ou JavaScript sem padronizao;
Baixa produtividade no desenvolvimento de aplicaes Web.
Web Apps sofisticadas - estado persistente entre requests
6
Globalcode open4education
O que JSF?
O que JavaServer Faces (JSF)?
Paradigma de programao visual de User-interfaces
baseado em componentes aplicado Web
O framework Java padro para user interfaces em Web
applications
UM framework que permite a criao de aplicaes Web
com semntica de Swing implementando MVC;
Uma especificao Java EE com mltiplas
implementaes (Mojarra / MyFaces)
Globalcode open4education
Introduo
Java EE EJB
Container
JSF e Java EE
JavaServer Faces
View
Controller
Servlet
Java
Server
Pages
Custom
Tag
Model
JavaBeans
EJB
Globalcode open4education
Introduo
Benefcios com o uso
Toolability = Ferramentabilidade (IDEs WYSIWYG);
Suporte a JSF na maioria dos IDEs;
Globalcode open4education
Introduo
Benefcios com o uso
Suporte a um modelo de eventos;
Componentes de UI de terceiros compatveis com JSF;
Globalcode open4education
Introduo
Glassfish - Oracle
Java EE Web Container
Java EE EJB
Container
11
Servlets
JSP
Custom Tags
JSF
EJB
Globalcode open4education
Introduo
WildFly Red Hat
Java EE EJB
Container
Implementao Red
12
Servlets
JSP
Custom Tags
JSF
Hat de Java EE
EJB
Globalcode open4education
Agenda
Introduo
Arquitetura do JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
13
Globalcode open4education
Arquitetura Web
14
Globalcode open4education
Arquitetura Swing
GUI e Listener
so processados pela
mesma mquina
Listener
-
Validao
Converso de dados
Integrao com a camada
Model
Lgica de negcios, etc
Java
Chamada a mtodos
15
Globalcode open4education
Arquitetura Web
Java Servlet
Validao
Converso de dados
Integrao com a camada
Model
Lgica de negcios, etc
HTTP
REQUEST / RESPONSE
Globalcode open4education
17
Globalcode open4education
1. Restore View
2. Apply Request Values
3. Process Validators
4. Update Model Values
Criao da rvore de
componentes de UI.
Se a pgina j foi
visualizada na mesma
session os dados so
recuperados.
5. Invoke Application
6. Render Response
18
Globalcode open4education
1. Restore View
2. Apply Request Values
3. Process Validators
4. Update Model Values
5. Invoke Application
Atualiza rvore
componentes de UI
com valores da
request.
Dispara quaisquer
eventos gerados pela
atualizao
6. Render Response
19
Globalcode open4education
1. Restore View
2. Apply Request Values
3. Process Validators
4. Update Model Values
5. Invoke Application
Executa todas
converses de dados +
validaes associadas
aos componentes de UI
6. Render Response
20
Globalcode open4education
1. Restore View
2. Apply Request Values
3. Process Validators
4. Update Model Values
5. Invoke Application
Cada componente de
UI atualiza o seu
backing model
6. Render Response
21
Globalcode open4education
1. Restore View
2. Apply Request Values
3. Process Validators
4. Update Model Values
5. Invoke Application
6. Render Response
22
Execuo do
ActionListener padro,
geralmente com
execuo de
componentes de
negcio
Globalcode open4education
1. Restore View
2. Apply Request Values
3. Process Validators
4. Update Model Values
5. Invoke Application
6. Render Response
23
Gerao da Response
com a rvore de
componentes de UI
Globalcode open4education
Arquitetura JSF
Principais componentes:
TagLibraries: JSF Core / HTML - cujas tags representam
componentes de tela fundamentais.
Managed Beans: classes Java que respondem por aes
e dados de telas JSF;
Expression Language: linguagem utilizada para declarar
o vnculo entre telas JSF e managed beans;
FacesController: Servlet provido pelo JSF que
representa o ncleo administrativo do JSF;
faces-config.xml: configuraes
24
Globalcode open4education
Arquitetura JSF
25
Globalcode open4education
Agenda
Introduo
Arquitetura do JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
26
Globalcode open4education
Configurao
27
jsf-api.jar
jsf-ri.jar
jstl.jar
standard.jar
commons-beansutils.jar
commons-digester.jar
commons-collections.jar
commons-logging.jar
JSF 2
Globalcode open4education
Configurao
Deployment Descriptor: web.xml
Fazer o mapeamento do FacesController
Associao do controlador pode ser feita por extenso
ou por diretrio, ex. /faces/*
<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>*.jsf</url-pattern>
</servlet-mapping>
28
Globalcode open4education
Configurao
faces-config.xml
Neste arquivo so feitas todas as configuraes da aplicao
JSF, como por exemplo:
29
Regras de Navegao
Managed Beans
Validators / Converters
i18n
Globalcode open4education
Agenda
Introduo
Arquitetura do JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
30
Globalcode open4education
Pgina JSF
Tags: JSF HTML
Request
Managed
Bean
Expression Language: EL
Session
Atravs destas tags
adicionamos validao,
converso de dados, listeners
Managed
Bean
Application
Managed
Bean
...
31
Globalcode open4education
32
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Bibliotecas de Tags
33
Globalcode open4education
34
Globalcode open4education
35
Globalcode open4education
36
Globalcode open4education
Use, portanto:
<h:form> ao invs de <form>
<h:inputText> ao invs de <input type="text>
37
Globalcode open4education
<html><head>...</head>
<h:body>
<f:view>
<h:form>
<h:graphicImage url="exemplo.png" />
<h:panelGrid columns="2">
<h:outputLabel for="textNome" value="Nome" />
<h:inputText id="textNome" value="..." />
<h:outputText value="Senha" />
<h:inputSecret value="" />
<h:outputText value="Observaes" />
<h:inputTextarea value="" />
</h:panelGrid>
<h:commandButton value="Enviar" action="..." />
</h:form>
</f:view>
38
Globalcode open4education
39
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Managed Beans
40
Globalcode open4education
Managed Beans
41
Globalcode open4education
Managed Beans
42
Globalcode open4education
Managed Beans
43
Globalcode open4education
Managed Beans
JSF 2:
@ManagedBean(name=clienteBean")
@SessionScoped
public class ClienteBean { ... }
44
Globalcode open4education
45
Managed Bean
faces-config.xml
Pgina JSF
Globalcode open4education
Pgina JSF
@RequestScoped
Managed Bean
faces-config.xml
@ManagedBean(name="olaMundoMB")
46
Globalcode open4education
47
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Componentes de User-Interface
Tecnicamente:
Todos os componentes de UI so subclasses da classe
abstrata UIComponent;
A classe UIComponentBase j implementa os mtodos
necessrios de UIComponent podendo ser estendida
diretamente;
48
Globalcode open4education
Componentes de User-Interface
Custom Tag renderiza um UICommand
em forma de boto
49
ou hyperlink
Globalcode open4education
Componentes de User-Interface
Globalcode open4education
Principais Componentes de UI
<f:view> e <h:form>
<f:subview>
<h:panelGrid> <h:panelGroup>
<h:inputText>
51
Globalcode open4education
Principais Componentes de UI
<h:inputTextArea>
<h:inputSecret>
<h:inputHidden>
<h:outputLabel>
<h:outputText>
Texto simples
<h:graphicImage>
52
Globalcode open4education
Principais Componentes de UI
<h:message>
<h:messages>
<h:outputLink>
<h:commandLink>
<h:commandButton>
53
Principais Componentes de UI
<h:selectOneListbox>
<h:selectOneMenu>
Um combobox
<h:selectOneRadio>
<h:selectBooleanCheckbox>
54
Globalcode open4education
Principais Componentes de UI
<f:view>
<h:form>
<h:graphicImage url="exemplo.png" />
<h:panelGrid columns="2">
<h:outputLabel for="textNome" value="Nome" />
<h:inputText id="textNome" value=#{exemplo.nome}" />
<h:outputText value="E-mail" />
<h:inputText value=#{exemplo.email}" />
<h:outputText value="Senha" />
<h:inputSecret value="" />
<h:outputText value="Observaes" />
<h:inputTextarea value="" />
</h:panelGrid>
<h:commandButton value="Enviar"
action="#{exemplo.lerDados}" />
</h:form>
<h:messages />
</f:view>
55
Globalcode open4education
Principais Componentes de UI
<h:selectOneListbox
value="#{exemplo.itemSelecionado}">
<f:selectItems value="#{exemplo.itemsLista}"
var=estado itemValue="#{estado.sigla}
itemLabel="#{estado.nome}/>
</h:selectOneListbox>
public String getItemSelecionado() {
return itemSelecionado;
}
public void setItemSelecionado(String itemSelecionado) {
this.itemSelecionado = itemSelecionado;
}
public ArrayList getItemsLista() {
ArrayList r =new ArrayList();
r.add(new Estado("SP","So Paulo"));
return r;
}
56
Globalcode open4education
Mensagens
Para gerar uma mensagem genrica que ser apresentada
com a tag <h:messages> na sua tela, devemos usar:
FacesMessage facesMsg =
new FacesMessage(FacesMessage.SEVERITY_INFO,
"resumo", "mensagem detalhada");
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null, facesMsg);
57
Globalcode open4education
Tabela de Dados
Para trabalhar com tabelas de dados que apresentam
colees de objetos utilizamos o componente <h:dataTable>:
<h:dataTable value="#{categoriaMB.categorias}"
var="categoria">
<h:column>
<f:facet name="header">ID</f:facet>
<h:outputText value="#{categoria.categoriaId}"/>
</h:column>
<h:column>
<f:facet name="header">Descricao</f:facet>
<h:outputText value="#{categoria.descricao}"/>
</h:column>
</h:dataTable>
58
Globalcode open4education
Tabela de Dados
O cdigo do managed bean deve apenas devolver a
collection para a tabela:
private List<Categoria> categorias;
public List<Categoria> getCategorias() {
categorias = CategoriaDAO().getInstance().getAll();
return categorias;
}
public void setCategorias(List<Categoria> cat){
this.categorias = cat;
}
59
Globalcode open4education
Tabela de Dados
O componente <h:dataTable> permite operarmos em uma
das linhas da tabela, por exemplo:
<h:dataTable value="#{categoriaMB.categorias}"
var="categoria">
<h:column>
<f:facet name="header">ID</f:facet>
<h:outputText value="#{categoria.categoriaId}"/>
</h:column>
<h:column>
<f:facet name="header">Descricao</f:facet>
<h:outputText value="#{categoria.descricao}"/>
</h:column>
<h:column>
<f:facet name="header">Comandos</f:facet>
<h:commandButton value="Excluir Categoria"
value="#{categoriaMB.excluir(categoria)}"/>
</h:column>
</h:dataTable>
60
Globalcode open4education
Tabela de Dados
No managed bean executamos a ao desejada:
61
Globalcode open4education
62
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
63
incluir / listar so
nomes de
navegaes
configuradas no
faces-config.xml
Globalcode open4education
64
Quando a regra de
navegao for
chamada a partir
do menu.xhtml
Se a String for
incluir
Exiba como
resposta a pgina
incluir.xhtml
Globalcode open4education
65
Globalcode open4education
66
Globalcode open4education
Globalcode open4education
Demonstrao
68
Globalcode open4education
69
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Validadores
70
Globalcode open4education
Validadores
71
Globalcode open4education
Validadores
Uma tag de validao pode ser aninhada em campos de
entrada
Para visualizar os erros de validao e/ou converso,
devemos utilizar <h:message> ou <h:messages>
possvel customizar as mensagens de erro padro criando
um arquivo properties e configurando-o no faces-config.xml
<h:inputText id="textDescricao"
value="#{categoriaMB.categoria.descricao}">
<f:validateLength maximum="255" minimum="5" />
</h:inputText>
<h:message for="textDescricao"/>
72
Globalcode open4education
Validadores
Todas as implementaes de JSF devem ter os
seguintes validadores (standard validators):
f:validateDoubleRange (DoubleRangeValidator)
f:validateLength (LengthValidator)
f:validateLongRange (LongRangeValidator)
f:validateRegex (RegularExpression)
f:validateRequired (Required)
JSF 2
Globalcode open4education
74
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Converso / Formatao
A representao de dados universal da Web String:
"1/1/2007" = java.util.Date
"20.05" = double
"true" = boolean
Sem o uso de um framework devemos converter os dados
manualmente usando parsers do Java SE (NumberFormat,
DateFormat...)
75
Globalcode open4education
Converso / Formatao
A converso de dados pode ser implcita ou explcita
Para tipos primitivos e wrapper classes: implcita!!!
Para outros tipos: explcita
O JSF dispe de uma poro de conversores:
76
Globalcode open4education
Converso / Formatao
Trs tags foram disponibilizadas para converso e
formatao de dados:
<f:convertDateTime>: especializada em datas
<f:convertNumber>: diversas formas de converter nmeros
<f:convert>: para associar o dado a um conversor especfico / customizado
<h:outputText id="textDataCadastro"
value="#{movimentoMB.movimento.dataCadastro}">
<f:convertDateTime pattern="dd/MM/yy" />
</h:outputText>
<h:inputText id="textValor"
value="#{movimentoMB.movimento.valor}">
<f:convertNumber type="currency" currencySymbol="R$" />
</h:inputText>
77
Globalcode open4education
Converso / Formatao
Os erros de converso so colocados em mensagens,
importante o uso de <h:message> / <h:messages>;
Podemos desenvolver nosso prprio conversor criando uma
classe que implementa a interface:
javax.faces.convert.Converter
Esta interface define dois mtodos:
public Object
UIComponent
public String
UIComponent
78
getAsObject(FacesContext ctx,
c, String s)
getAsString(FacesContext ctx,
c, Object o)
Globalcode open4education
Converso / Formatao
Alm dos conversores, todas as tags JSF disponibilizam o
parmetro rendered;
Com EL, podemos configurar o rendered para retornar um
booleano que indicar se a tag deve ou no ser renderizada:
<h:column>
<f:facet name="header">Status</f:facet>
<h:outputText value="Compensada"
rendered="#{movimento.status eq '1'}" />
<h:outputText value="Programada"
rendered="#{movimento.status eq '0'}" />
<h:outputText value="Cancelada"
rendered="#{movimento.status eq '9'}" />
</h:column>
Globalcode open4education
80
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Navegao
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Eventos
Modelo de eventos muito parecido com AWT e Swing
Os Eventos so responsveis pela propagao das aes
sobre a interface com o usurio;
Ex: preenchimento de formulrio, ao via link/boto
Cada componente de UI pode disparar quantos eventos
forem necessrios;
Dois tipos de eventos:
Eventos de mudana de valor;
Eventos de ao;
81
Globalcode open4education
Eventos
Managed
Bean
Pgina
JSF
82
Globalcode open4education
Eventos
Uma outra forma de uma UI se comunicar com managed
bean atravs de eventos
Um comando dispara um mtodo no managed bean quando
o usurio clica no boto ou link
Um evento acionado no managed bean quando algo
acontece em um componente da tela
Um evento JSF semelhante a um evento Swing, porm o
listener se encontra em um servidor
83
Globalcode open4education
Eventos
Exemplo de evento tipo ValueChange:
<h:selectOneRadio
valueChangeListener="#{loginMB.atualizaUI}"
onchange="submit()">
<f:selectItem itemLabel="Ja tenho cadastro" itemValue="1" />
<f:selectItem itemLabel="Quero me cadastrar" itemValue="2" />
<f:selectItem itemLabel="Esqueci minha senha" itemValue="3" />
</h:selectOneRadio>
public void
int valor
if (valor
} else if
} else if
}
}
84
atualizaUI(ValueChangeEvent event) {
= Integer.parseInt(event.getNewValue().toString());
== 1) { //regra de negcios
(valor == 2) {//regra de negcios
(valor == 3) {//regra de negcios
Globalcode open4education
Eventos
Exemplo de evento do tipo ActionEvent:
<h:commandButton value="Login"
actionListener="#{loginMB.login}" />
85
Globalcode open4education
86
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
87
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
Facelets
Framework de templates de pginas
Linguagem padro para descrever telas no JSF 2
88
Globalcode open4education
Usando Facelets
Vamos trabalhar com dois tipos diferentes de pginas:
Pgina template: no so visualizadas diretamente pelo usurio
Servem apenas para serem "herdadas". Nas pginas template
usamos a tag <ui:insert> para definir reas.
90
Globalcode open4education
Usando Facelets
Devemos fazer uma referncia ao namespace das
tags:
<html ..
xmlns:ui="http://java.sun.com/jsf/facelets">
91
Globalcode open4education
Usando Facelets
Exemplo de definio de um template:
template1.xhtml
<f:view>
<h:panelGrid columns="1" styleClass="table1">
<ui:insert name="menu">
<p>Area de menu padrao:</p>
</ui:insert>
<ui:insert name="dados">
<p>Area de dados padrao:</p>
</ui:insert>
<h:messages />
</h:panelGrid>
</f:view>
92
Globalcode open4education
Usando Facelets
Exemplo de uso de um template:
PaginaComMenu.xhtml
<ui:composition template="/template1.xhtml">
<ui:define name="menu">
<f:subview id="menusSubView">
<h:form>
<h:panelGrid columns="4">
<h:commandButton action="Categorias" value />
...
</h:panelGrid>
</h:form>
</f:subview>
</ui:define>
</ui:composition>
93
Globalcode open4education
Usando Facelets
Outro exemplo com o uso de template:
CategoriaForm.xhtml
<ui:composition template="/PaginaComMenu.xhtml">
<ui:define name="dados">
<f:subview id="categoriaForm">
<h:form>
<h:panelGrid columns="2">
<h:outputText for="textDescricao"
value="#{formCategoriaBundle.textoDescricao}" />
<h:inputText id="textDescricao"
value="#{categoriaMB.categoria.descricao}"/>
</h:panelGrid>
<h:commandButton value="#{formCategoriaBundle.botaoSalvar}"
action="#{categoriaMB.salvarCategoria}" />
</h:form>
</f:subview>
</ui:define>
</ui:composition>
94
Globalcode open4education
95
Bibliotecas de Tags
Managed Beans
Componentes de User-interface (UI)
Validadores
Conversores
Eventos e Listeners
Facelets
Ajax
Globalcode open4education
JSF 2.0
Adicionado suporte nativo a AJAX atravs do componente
<f:ajax>
O componente <f:ajax> adicionado ao corpo do elemento que
deve suportar requisies AJAX ao servidor
96
Globalcode open4education
97
Globalcode open4education
98
Globalcode open4education
listener="#{clienteMB.tratadorAjax}" />
</h:inputText>
<h:outputText id="otTeste" value="#{clienteMB.mensagem}" />
99
Globalcode open4education
Globalcode open4education
Agenda
Introduo
Arquitetura JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
101
Globalcode open4education
Ferramentas
Gratuitos
Eclipse 6 - Helios (com JBoss Tools 3 timo suporte a Facelets)
NetBeans 7
Oracle JDeveloper 11
Red Hat Developer Studio
Pagos
MyEclipse Enterprise Workbench 9.x
JetBrains IntelliJ IDEA 10.x
102
Globalcode open4education
Agenda
Introduo
Arquitetura JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
103
Globalcode open4education
Mais informaes
Sites
http://docs.oracle.com/javaee/7/tutorial/jsf-intro.htm
http://weblogs.java.net/blog/edburns/
http://www.jsfcentral.com/
Java Specification Requests
JSF 1.0 e 1.1: http://www.jcp.org/en/jsr/detail?id=127
JSF 1.2: http://www.jcp.org/en/jsr/detail?id=252
JSF 2.0 e 2.1: http://www.jcp.org/en/jsr/detail?id=314
JSF 2.2: http://www.jcp.org/en/jsr/detail?id=344
104
Globalcode open4education
Livros
JSF The Complete Reference
Ed Burns
JSF in Action
Kitto Mann
Globalcode open4education
Agenda
Introduo
Arquitetura JSF
Configurao
Principais componentes JSF
Ferramentas
Referncias
Perguntas e Respostas
106
Globalcode open4education
Perguntas e Respostas
107
Globalcode open4education
Agradecemos a presena!
108
Globalcode open4education