curso jsf fa7
TRANSCRIPT
![Page 1: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/1.jpg)
1
Curso JSFIntegrando JSF, Ajax4Jsf,
RichFaces e Facelets
Instrutor: Fábio Henrique Barros
![Page 2: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/2.jpg)
2
Conteúdo
Java Server Faces Introdução Gerenciando a Navegação Managed Beans JSF Expression Language Java Server Faces Standard Tags Modelo de Componentes Conversão e Validação Tratando Eventos Ciclo de Vida de uma Requisição PhaseListeners Ajax e JSF Usando componentes (JBoss Richfaces) Gerenciamento de Layout com Facelets
![Page 3: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/3.jpg)
3
JSF - Introdução
O que é o Java Server Faces Framework para simplificar o desenvolvimento de
aplicações WEB Baseado em Componentes Conjunto de componentes GUI para WEB Modelo orientado a eventos Ciclo de vida de requisição bem definido. O desenvolvedor não precisa se preocupar com
detalhes sobre HTTP Não é limitado a HTML Container IoC (provê injeção de dependências)
C
![Page 4: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/4.jpg)
4
JSF - Introdução
O que é o Java Server Faces (cont.)
O
Vantagens Componentes GUI personalizados POJOs (Plain Old Java Object ): Objeto sem herança nem implementa interfaces. Tratamento de Eventos Conversão e Validação Suporte a outras tecnologias de transporte e
apresentação Managed Beans Expression Language Configuração mais simples
![Page 5: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/5.jpg)
5
JSF - Introdução
Design MVC
![Page 6: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/6.jpg)
6
JSF - Introdução
Primeira Aplicação Bibliotecas (Sun RI)
B
jsf-api.jar jsf-impl.jar
j
jstl.jar Configurações
web.xml faces-config.xml
Páginas jsp, html, js, css, etc...
![Page 7: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/7.jpg)
7
JSF - Introdução
Criando um projeto JSF no Eclipse Passo I:
Criar no projeto do tipo Dynamic Web Project Preencher o nome do projeto: CursoJsf Configurar o servidor de aplicação: Tomcat 6.0
Passo II: Configurar as versões: Web=2.5, Java=6.0, JSF=1.2
Passo III: Configurar os parâmetros: root=cursojsf,
content=web, source=src Passo IV:
Configurar o mapeamento do JSF: “*.jsf”
![Page 8: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/8.jpg)
8
JSF - Introdução
![Page 9: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/9.jpg)
9
JSF - Introdução
![Page 10: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/10.jpg)
10
JSF - Introdução
![Page 11: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/11.jpg)
11
JSF - Introdução
![Page 12: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/12.jpg)
12
JSF - Introdução
Exemplo: web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>CursoJsf</display-name><welcome-file-list>
<welcome-file>default.jsp</welcome-file></welcome-file-list><!-- Java Server 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></web-app>
![Page 13: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/13.jpg)
13
JSF - Introdução
Exemplo: faces-config.xml<?xml version="1.0" encoding="UTF-8"?><faces-config xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"version="1.2">
<application><resource-bundle>
<base-name>SystemMessages</base-name><var>msg</var>
</resource-bundle><locale-config>
<default-locale>pt_BR</default-locale></locale-config>
</application></faces-config>
![Page 14: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/14.jpg)
14
JSF - Introdução
Exemplo: default.jsp<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %><c:redirect url="/index.jsf" />
Exemplo: index.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view><html><head>
<title> <h:outputText value="Página Inicial" />
</title></head><body>
<h:outputText value="Página Inicial" /></body></html></f:view>
![Page 15: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/15.jpg)
15
JSF - Gerenciando a Navegação
Fluxo da requisição:
![Page 16: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/16.jpg)
16
JSF - Gerenciando a Navegação
Gerenciando a Navegação Definida usando Regras de Navegação
Configurado no faces-config.xml <navigation-rule> <from-view-id>/login.jsp</from-view-id>(opcional) <navigation-case > <from-action>#{loginBean.login}</from-action>(opcional) <from-outcome>sucesso</from-outcome> <to-view-id>/index.jsp</to-view-id> <redirect/> (opcional) </navigation-case></navigation-rule>
Estática – Configurado na própria página Dinâmica – Saída de uma Action
![Page 17: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/17.jpg)
17
JSF - Gerenciando a Navegação
Exemplo: faces-config.xml...<!-- Navigation --><navigation-rule>
<navigation-case><from-outcome>index</from-outcome><to-view-id>/index.jsp</to-view-id><redirect />
</navigation-case></navigation-rule>
<navigation-rule><navigation-case>
<from-outcome>ajuda</from-outcome><to-view-id>/ajuda.jsp</to-view-id><redirect />
</navigation-case></navigation-rule>...
![Page 18: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/18.jpg)
18
JSF - Gerenciando a Navegação
Exemplo: index.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view><html><head>
<title><h:outputText value="Página Inicial" />
</title></head><body>
<h:form><h:commandLink action="ajuda" value="Página de ajuda" />
</h:form></body></html></f:view>
![Page 19: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/19.jpg)
19
JSF - Gerenciando a Navegação
Exemplo: ajuda.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view><html><head><title>
<h:outputText value="Página de Ajuda" /></title></head><body>
<h:form><h:outputText value="Texto da ajuda!" /><br /><h:commandButton action="index"
value=“Voltar" /></h:form>
</body></html></f:view>
![Page 20: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/20.jpg)
20
JSF - Gerenciando a Navegação
Exercício: Crie uma página de sobre, onde esta deverá
conter as informações do sistema e do autor Crie uma navegação da página de ajuda para a
página de sobre Crie uma navegação da página de sobre para a
página de ajuda
![Page 21: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/21.jpg)
21
JSF - Message Bundles
Message Bundles Centralizar mensagens em um único lugar Arquivo .properties do tipo chave=valor Suporte a mensagens com parâmetros Suporte a internacionalização
![Page 22: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/22.jpg)
22
JSF - Message Bundles
Configuração: SystemMessages.properties
#Page: indexpage.index.title=Página Inicialpage.index.link.ajuda=Visualizar ajuda!#Page: ajudapage.ajuda.title=Página de Ajudapage.ajuda.texto=Texto da ajuda!
faces-config.xml<faces-config> <!-- Configurações gerais do JSF -->
<resource-bundle> <base-name>SystemMessages</base-name> <var>msg</var> </resource-bundle> <locale-config> <default-locale>pt_BR</default-locale> </locale-config>
<faces-config>
![Page 23: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/23.jpg)
23
JSF - Message Bundles
Exemplo: index.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view><html><head>
<title><h:outputText value="#{msg['page.index.title']}" />
</title></head><body>
<h:form><h:commandLink action="ajuda"
value="#{msg['page.index.link.ajuda']}" /></h:form>
</body></html></f:view>
![Page 24: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/24.jpg)
24
JSF - Message Bundles
Exemplo: ajuda.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view><html><head><title>
<h:outputText value="#{msg['page.ajuda.title']}" /></title></head><body>
<h:form><h:outputText value="#{msg['page.ajuda.texto']}" /><br /><h:commandButton action="index"
value="#{msg['commons.voltar']}" /></h:form>
</body></html></f:view>
![Page 25: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/25.jpg)
25
JSF - Message Bundles
Exercício: Configure um Message Bundle. Altere todas as páginas criadas até agora para
usar somente o Message Bundle configurado.
A partir de agora, somente usaremosMessage Bundles
![Page 26: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/26.jpg)
26
JSF - Managed Beans
Managed Beans Usados para separação entre as lógicas de
negócio e de apresentação O que são Beans?
Definição de JavaBean : “a reusable software component that can be manipulated in a builder tool”
Construtor Vazio Propriedades privadas, acessadas por métodos get e
set (getXyz, setXyz)
s
Não é necessário herdar de nenhuma classe em especial (POJO)
e
No JSF também são chamados de backing beans Gerenciados pelo Framework
![Page 27: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/27.jpg)
27
JSF - Managed Beans
Managed Beans (cont.)
M
Definidos no faces-config.xml Nome, classe, propriedades e escopo Propriedades para os dados do Form Métodos Action (Controller)
M
Propriedades para valores de saída Associados a páginas WEB através da EL Instanciados e inicializados pelo Container
![Page 28: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/28.jpg)
28
JSF - Managed Beans
Exemplo: GuessNumberBean.javapublic class GuessNumberBean {
/** Numero a ser adivinado. */private Integer numero;/** Palpite do usuário. */private Integer palpite;/** Tentativas. */private Integer tentativas;/** Mensagem de erro. */private String mensagem;/* Gerar get e set. */public String init() {
numero = (int) (1 + (Math.random() * 100));palpite = null;mensagem = "page.guess.label.branco";return "guess";
}public String guess() {
if (palpite.equals(numero)) {mensagem = "page.guess.acerto";
} else if (numero.compareTo(palpite) < 0) {mensagem = "page.guess.menor";
} else {mensagem = "page.guess.maior";
}tentativas++;return "guess";
}}
![Page 29: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/29.jpg)
29
JSF - Managed Beans
Exemplo: faces-config.xml<faces-config> ... <!-- Managed Beans --> <managed-bean> <managed-bean-name>guessBean</managed-bean-name> <managed-bean-class> br.com.cursojsf.view.GuessNumberBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>tentativas</property-name> <value>0</value> </managed-property> </managed-bean> ... <navigation-rule> <navigation-case> <from-outcome>guess</from-outcome> <to-view-id>/guess.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> ...</faces-config>
![Page 30: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/30.jpg)
30
JSF - Managed Beans
Exemplo: guess.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view><html><head>
<title><h:outputText value="#{msg['page.guess.title']}" />
</title></head><body>
<h:form id="guessForm"><h:commandLink id="link" action="#{guessBean.init}“
value="#{msg['page.guess.label.iniciar']}" /><br/><br/><h:outputLabel for="palpite" value="#{msg['page.guess.label.numero']}: " /><h:inputText id="palpite" value="#{guessBean.palpite}" /><h:commandButton value="#{msg['page.guess.label.enviar']}“
action="#{guessBean.guess}" /><br/><br/><h:outputFormat id="outtext" value="#{msg[guessBean.mensagem]}" styleClass="error">
<f:param value="#{guessBean.tentativas}" /></h:outputFormat><hr/><h:commandButton action="index" value="#{msg['commons.voltar']}" />
</h:form></body></html></f:view>
![Page 31: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/31.jpg)
31
JSF - Managed Beans
Ciclo de uma requisição:
![Page 32: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/32.jpg)
32
JSF - Managed Beans
Exercício: Construir a página “Adivinhe o número”
![Page 33: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/33.jpg)
33
JSF - JSF Expression Language
JSF Expression Language Bastante semelhante a EL JSP 2.0
Forma de uso: #{blah} Usado nas páginas e no faces-config.xml (DI)
U
Fácil acesso as propriedades de um bean #{loginBean.email}, #{loginBean.senha}, #{usuarioBean.usuario.nome}, #{usuarioBean.usuario.endereco.logradouro}
Acesso a objetos implícitos (session, request, application)
A
Acesso a propriedades e métodos dos beans Acesso simples a elementos de uma coleção Suporte a operadores (or, and, eq, lt, gt, +, -, etc)
S
![Page 34: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/34.jpg)
34
JSF - JSF Standard Tags
JSF Standard Tags Disponibilizadas pelo JSF Componentes Base para desenvolvimento Duas bibliotecas: html e core (43 tags no total)
D
São taglibs (importadas através da diretiva taglib)
S
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
![Page 35: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/35.jpg)
35
JSF - JSF Standard Tags
Biblioteca core Serve como suporte para html (e outras)
S
Toda página de ter um <f:view> Raiz da árvore de componentes
Tag <f:loadBundle> usada para carregar arquivo .properties
Na versão 1.2 não é mais necessário declarar A maioria das tags representam objetos a serem
adicionados a componentes Atributos, Listeners, Converters, Validators, Facets,
Parametros, Select Items
![Page 36: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/36.jpg)
36
JSF - JSF Standard Tags
Biblioteca Html Biblioteca de componentes Html
Componentes para entrada e saída de dados Outros: forms, mensagens, componentes de layout
Tags da lib html form, inputText, inputTextArea, inputSecret, inputHidden, outputLabel, outputLink, outputFormat, outputText, commandButton, commandLink, message, messages, graphicImage, selectOneListBox, selectOneMenu, selectOneRadio, selectBooleanCheckbox, SelectManyCheckbox, SelectManyListbox, SelectManyMenu, panelGrid, panelGroup, dataTable, column
![Page 37: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/37.jpg)
37
JSF - JSF Standard Tags
Biblioteca html Categorias
Input (input...)
)
Output (output...)
)
Comandos ou actions (commandButton, commandLink)
)
Seleção (checkbox, listbox, menu, radio)
)
Layout (panelGrid, panelGroup)
)
Data Table (dataTable)
)
Erros e Mensagens (message, messages)
)
![Page 38: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/38.jpg)
38
JSF - JSF Standard Tags
Biblioteca html Atributos Comuns a todos
HTML 4.0 (accesskey, lang, dir, etc) e eventos DHTML (onclick, onmouseover, onchange, etc)
id – Identificador para o componente binding – Usado para referenciar componente em um
backing bean rendered – Booleano indicando se o componente será
mostrado styleClass – Nome da classe CSS
![Page 39: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/39.jpg)
39
JSF - JSF Standard Tags
Biblioteca html Outros Atributos
value – Valor do componente (I, O, C)
v
valueChangeListener – Método que responde a uma mudança no valor do componente (I)
m
converter – Conversor associado ao componente (I, O)
c
validator – Validador associado ao componente (I)
v
required – Booleano indicando se o campo é obrigatório (I)
o
![Page 40: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/40.jpg)
40
JSF - JSF Standard Tags
Biblioteca html - IDs e Bindings IDs
Permite acessar elementos HTML através de javascript Permite referenciar componentes em outras tags<h:inputText id="nomeUsuario" value="#{usuarioBean.nome}" /><h:message for="nomeUsuario" errorStyle="color: #FF0000;" />
Permite referencia componentes no código JavaFacesContext context = FacesContext.getCurrentInstance();UIComponent nome =
context.getViewRoot().findComponent("nomeUsuario");
![Page 41: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/41.jpg)
41
JSF - JSF Standard Tags
Biblioteca html - IDs e Bindings Bindings “Liga” o componente a uma propriedade do backing bean <h:inputText id="palpite" value="#{guessBean.palpite}"
binding="#{guessBean.palpiteInput}" />/** * Input do palpite. */private UIInput palpiteInput;public UIInput getPalpiteInput() { return palpiteInput;
}
public void setPalpiteInput(UIInput palpiteInput) { this.palpiteInput = palpiteInput;
}
![Page 42: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/42.jpg)
42
JSF - JSF Standard Tags
Exemplo: GuessNumberBean.javapublic String init() {
numero = (int) (1 + (Math.random() * 100));palpite = null;mensagem = "page.guess.label.branco";if (palpiteInput != null) {
palpiteInput.setRendered(true);}return "guess";
}public String guess() {
if (palpite.equals(numero)) {mensagem = "page.guess.acerto";palpiteInput.setRendered(false);} else if (numero.compareTo(palpite) < 0) {
mensagem = "page.guess.menor";} else {
mensagem = "page.guess.maior";}tentativas++;return "guess";
}
![Page 43: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/43.jpg)
43
JSF - JSF Standard Tags
Exercício: Alterar a página “guess.jsp” e o bean
“GuessNumberBean.java” para contemplar o binding.
![Page 44: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/44.jpg)
44
JSF - JSF Standard Tags
DataTable Componente para mostrar dados de forma
tabular Renderiza a tag <table> do HTML Não é necessário Loops. É só usar Definição de Cabeçalho e Rodapé É configurável por CSS
headerClass – classe css para o cabeçalho footerClass – classe css para o rodapé rowClasses – classe para as linhas (lista separada por
vírgula)
![Page 45: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/45.jpg)
45
JSF - JSF Standard Tags
Exemplo: usuarios.jsp<%@ page language="java" contentType="text/html; charset=ISO-8859-1“
pageEncoding="ISO-8859-1"%><%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%><f:view><html><head>
<title><h:outputText value="#{msg['page.usuarios.title']}" /></title></head><body><h:form> <h:dataTable value="#{usuarioBean.listaUsuarios}" var="usuario“ border="1" cellspacing="0" cellpadding="2"> <h:column> <f:facet name="header"> <h:outputText value="#{msg['page.usuarios.label.cpf']}" /> </f:facet> <h:outputText value="#{usuario.cpf}" /> </h:column>...
![Page 46: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/46.jpg)
46
JSF - JSF Standard Tags
Exemplo: usuarios.jsp (cont.) <h:column> <f:facet name="header"> <h:outputText value="#{msg['page.usuarios.label.nomeReduzido']}" /> </f:facet> <h:outputText value="#{usuario.nomeReduzido}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="#{msg['page.usuarios.label.email']}" /> </f:facet> <h:outputLink value="mailto:#{usuario.email}"> <h:outputText value="#{usuario.email}" /> </h:outputLink> </h:column> <h:column> <f:facet name="header"> <h:outputText value="#{msg['page.usuarios.label.dataNascimento']}" /> </f:facet> <h:outputText value="#{usuario.dataNascimento}" /> </h:column>...
![Page 47: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/47.jpg)
47
JSF - JSF Standard Tags
Exemplo: usuarios.jsp (cont.) </h:dataTable> <hr/> <h:commandButton action="index" value="#{msg['commons.voltar']}" /></h:form></body></html></f:view>
![Page 48: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/48.jpg)
48
JSF - JSF Standard Tags
Exemplo: UsuarioBean.javapublic class UsuarioBean { /** Referencia para a camada de regras de negocio */ private UsuarioBusiness usuarioBusiness; /** Usuario a serusado no form. */ private Usuario usuario = new Usuario(); /** Armazena o usuario logado apos a autenticacao */ private Usuario usuarioLogado;
/* Gerar gets e sets */
public List<Usuario> getListaUsuarios() { return usuarioBusiness.selecionarTodos(); }}
![Page 49: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/49.jpg)
49
JSF - JSF Standard Tags
Exemplo: faces-config.xml<managed-bean> <managed-bean-name>usuarioDao</managed-bean-name> <managed-bean-class>br.com.cursojsf.dao.impl.UsuarioDaoImpl</managed-bean-class> <managed-bean-scope>application</managed-bean-scope></managed-bean><managed-bean> <managed-bean-name>usuarioBusiness</managed-bean-name> <managed-bean-class>br.com.cursojsf.business.impl.UsuarioBusinessImpl</managed-bean-class> <managed-bean-scope>application</managed-bean-scope> <managed-property> <property-name>usuarioDao</property-name> <value>#{usuarioDao}</value> </managed-property></managed-bean>
![Page 50: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/50.jpg)
50
JSF - JSF Standard Tags
Exemplo: faces-config.xml (cont.)<managed-bean> <managed-bean-name>usuarioBean</managed-bean-name> <managed-bean-
class>br.com.cursojsf.view.UsuarioBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>usuarioBusiness</property-name> <value>#{usuarioBusiness}</value> </managed-property></managed-bean><navigation-rule> <navigation-case> <from-outcome>usuarios</from-outcome> <to-view-id>/usuarios.jsp</to-view-id> </navigation-case></navigation-rule>
![Page 51: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/51.jpg)
51
JSF - JSF Standard Tags
Exercício: Construa a consulta de usuários Construa o cadastro de usuários
Página de consulta deve ter: Um link para edição Botão para adicionar um novo usuário Botão para excluir usuário
Página de edição deve ter: Form para alterar/incluir usuário
Veja os exemplos a seguir
![Page 52: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/52.jpg)
52
JSF - JSF Standard Tags
Exemplo: usuarios.jsp...<h:commandLink action="usuariosEditar"> <h:outputText value="#{usuario.cpf}" /> <f:setPropertyActionListener target="#{usuarioBean.usuario}" value="#{usuario}"/> </h:commandLink><h:column> <f:facet name="header"> <h:outputText value="#{msg['commons.excluir']}" /> </f:facet> <h:commandButton action="#{usuarioBean.excluir}" value="#{msg['commons.excluir']}"> <f:setPropertyActionListener target="#{usuarioBean.usuario}" value="#{usuario}"/> </h:commandButton></h:column>...<h:commandButton action="#{usuarioBean.novo}" value="#{msg['commons.novo']}" />
![Page 53: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/53.jpg)
53
JSF - JSF Standard Tags
Exemplo: usuariosEditar.jsp<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%><f:view><html><head> <title><h:outputText value="#{msg['page.usuarios.title']}" /></title></head><body> <h:form id="usuarioForm"> <h:panelGrid columns="2"> <h:outputLabel for="idInput" value="#{msg['page.usuarios.label.id']}:" /> <h:inputText id="idInput" value="#{usuarioBean.usuario.id}" /> <h:outputLabel for="cpfInput" value="#{msg['page.usuarios.label.cpf']}:"/> <h:inputText id="cpfInput" value="#{usuarioBean.usuario.cpf}" /> <h:outputLabel for="nomeReduzidoInput" value="#{msg['page.usuarios.label.nomeReduzido']}:" /> <h:inputText id="nomeReduzidoInput" value="#{usuarioBean.usuario.nomeReduzido}" />
![Page 54: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/54.jpg)
54
JSF - JSF Standard Tags
Exemplo: usuariosEditar.jsp <h:outputLabel for="nomeCompletoInput" value="#{msg['page.usuarios.label.nomeCompleto']}:" /> <h:inputTextarea id="nomeCompletoInput" value="#{usuarioBean.usuario.nomeCompleto}" rows="5" cols="20"/> <h:outputLabel for="emailInput" value="#{msg['page.usuarios.label.email']}:" /> <h:inputText id="emailInput" value="#{usuarioBean.usuario.email}" /> <h:outputLabel for="senhaInput" value="#{msg['page.usuarios.label.senha']}:" /> <h:inputText id="senhaInput" value="#{usuarioBean.usuario.senha}" /> </h:panelGrid> <hr/> <h:commandButton action="#{usuarioBean.salvar}" value="#{msg['commons.salvar']}" /> <h:commandButton action="usuarios" value="#{msg['commons.voltar']}" /> </h:form></body></html></f:view>
![Page 55: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/55.jpg)
55
JSF - JSF Standard Tags
Exemplo: faces-config.xml<navigation-rule> <navigation-case> <from-outcome>usuariosEditar</from-outcome> <to-view-id>/usuariosEditar.jsp</to-view-id> </navigation-case></navigation-rule> Exemplo: UsuarioBean.javapublic String novo() { usuario = new Usuario(); return "usuariosEditar";}public String salvar() { usuarioBusiness.salvarUsuario(usuario); return "usuarios";}public String excluir() { usuarioBusiness.excluirUsuario(usuario); return "usuarios";}
![Page 56: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/56.jpg)
56
JSF - JSF Standard Tags
Recursos de implementação JSP: <f:setPropertyActionListener>
Carrega propriedade de um Managed Bean Destino: target="#{usuarioBean.usuario}“ Origem: value="#{usuario}"
Faces-config.xml: <redirect /> Envia comando http para o browser efetuar nova
requisição para a página desejada Não deve ser usada em conjunto com beans que estão
em escopo de request Como o browser faz nova requisição, apenas os objetos que
estão na sessão estarão visíveis.
![Page 57: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/57.jpg)
57
JSF - Modelo de Componentes
O que são componentes UI? Idioma bem definido para projeto de UIs São elementos configuráveis e reutilizáveis que
compõem a interface da aplicações JSF Podem ser simples, como um botão, ou
composto, como uma tabela, de múltiplos componentes
Extensíveis através de composição e herança São acessados através tags JSP
![Page 58: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/58.jpg)
58
JSF - Modelo de Componentes
![Page 59: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/59.jpg)
59
JSF - Modelo de Componentes
Modelo de Componentes Conjunto de classes javax.faces.component.UIComponent especificando o estado e o comportamento dos componentes UI
Modelo de Renderização. Define como renderizar (“mostrar”) os componentes de diferentes maneiras
Modelo de Eventos e Listeners que define como tratar os eventos dos componentes
Modelo de conversão que define como diferentes conversores são “plugados” nos componentes
Modelo de validação que define como registrar validadores em um componente
![Page 60: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/60.jpg)
60
JSF - Modelo de Componentes
Modelo de Componentes UIComponent Classes
Define a funcionalidade do componente (comportamento e estado)
(
JSF provê um conjunto de classes UIComponent. É possível estender essas classes para criar componentes personalizados
A maioria dos componentes podem ser mostrados de formas diferentes (ex. commandButton e commandLink)
c
UICommand, UIForm, UIGraphic, UIInput, UISelectBoolean, UISelectMany, UISelectOne, etc
![Page 61: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/61.jpg)
61
JSF - Modelo de Componentes
Modelo de Componentes Modelo de Renderização – RenderKit
A renderização é manipulado pelo Render Kit, não pelo componente em si
O Render Kit define como componentes serão mostrados para um cliente em particular
A implementação do JSF inclui um Render Kit para clientes HTML 4.01
Os Render Kits podem usar um look and feel (skin)
O
Podem ser específicos para um plataforma (celular, PC) ou linguagem de marcação (HTML, WML, SVG, etc)
e
Podem ser mudados “on the fly”
![Page 62: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/62.jpg)
62
JSF - Modelo de Componentes
Modelo de Componentes Modelo de Renderização – Renderer Object
Definir o comportamento de um componente uma vez, e criar vários renderizadores (commandButton e commandLink)
c
Para cada componente que o Render Kit suporta, existe um conjunto de Renderer Objects
Define como um componente irá ser mostrado. O UISelectOne define três Renderer Objects diferentes
Combo Box Radio Button List Box
![Page 63: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/63.jpg)
63
JSF - Modelo de Componentes
FacesContext Contém todas as informações sobre estado
relacionadas ao processamento de uma única requisição
É passado para, e potencialmente modificado por, cada fase do ciclo de vida da requisição
Acessado através de el #{facesContext} ou nos Beans através do método FacesContext.getCurrentInstance()
F
![Page 64: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/64.jpg)
64
JSF - Modelo de Componentes
Exemplo: FacesContextpublic String autenticar() { try { usuarioLogado = usuarioBusiness.autenticarUsuario( usuario.getCpf(), usuario.getSenha()); return "principal"; } catch (UsuarioInvalidoException e) { FacesMessage message = new FacesMessage(); message.setSeverity(FacesMessage.SEVERITY_ERROR); message.setDetail("Usuário ou senha inválidos!"); FacesContext.getCurrentInstance() .addMessage("loginForm", message); return null; }}
![Page 65: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/65.jpg)
65
JSF - Conversão e Validação
Conversão e Validação – Converters Em aplicações WEB os dados enviados do cliente
são sempre Strings Java é uma linguagem tipada Precisamos converter os dados enviados JSF provê Conversores para todos os tipos
básicos do Java (Date, Integer, Double, Long)
b
Convertem o valor dos componentes de e para string
Aplicam formatação ou internacionalização Podemos definir novos conversores e associar aos
componentes
![Page 66: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/66.jpg)
66
JSF - Conversão e Validação
Exemplo: corverters<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %><%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %><f:view>...<h:form> ... <h:outputText value="#{msg['page.usuarios.cpf']}" /> <h:inputText id="ganhosUsuario" value="#{usuarioBean.usuario.ganhos}"> <f:convertNumber type="currency"/> </h:inputText> <h:message for="ganhosUsuario" /> <h:outputText value="#{msg['page.usuarios.cpf']}" /> <h:inputText id="cpfUsuario" value="#{usuarioBean.usuario.cpf}" converter="converters.CpfConverter" /> <h:message for="cpfUsuario" /> <h:outputText value="#{msg['page.usuarios.dataNascimento']}" /> <h:inputText id="dataNascimentoUsuario" value="#{usuarioBean.usuario.dataNascimento}"> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:inputText> <h:message for="dataNascimentoUsuario" /> ...</h:form></body></html></f:view>
![Page 67: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/67.jpg)
67
JSF - Conversão e Validação
Conversão e Validação – Converters É possível definir Converters Implementar Interface javax.faces.convert.Converter
Métodos getAsString e getAsObject Registrar o converter no faces-config.xml.
Reutilizar em várias partes da aplicação Defini-se um id para o converter Associa o converter a uma classe . Todas as instâncias
dessa classe utilizaram esse converter (<converter-for-class>)
)
Associar ao componente desejado
![Page 68: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/68.jpg)
68
JSF - Conversão e Validação
Exemplo: CpfConverter.javapublic class CpfConverter implements Converter { public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException { if (value != null && !value.equals("")) { String cpf = value.replaceAll("\\.", "").replaceAll("\\-", ""); try { // Testa se somente existem numeros. Long.valueOf(cpf); return cpf; } catch (NumberFormatException e) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro de conversão", "Não foi possível converter o valor para um
cpf"); throw new ConverterException(message); } } return value; } public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException { String cpf = (value == null? null: value.toString()); if (cpf != null && !cpf.equals("") { cpf = cpf.substring(0, 3) + "." + cpf.substring(3, 6) + "." + cpf.substring(6, 9) + "-" + cpf.substring(9); } return cpf; }}
![Page 69: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/69.jpg)
69
JSF - Conversão e Validação
Exemplo: faces-config.xml<faces-config> ... <converter> <converter-id>converters.CpfConverter</converter-id> <converter-class> br.com.cursojsf.view.converters.CpfConverter </converter-class> </converter> ...</faces-config> Exemplo: usuariosEditar.jsp<h:inputText id="cpfInput" value="#{usuarioBean.usuario.cpf}" converter="converters.CpfConverter" />
ou<h:inputText id="cpfInput" value="#{usuarioBean.usuario.cpf}"> <f:converter converterId="converters.CpfConverter" /></h:inputText>
![Page 70: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/70.jpg)
70
JSF - Conversão e Validação
Conversão e Validação – Validators Tarefa que praticamente toda aplicação web precisa
Verifica se todos os campos obrigatórios foram preenchido corretamente
Mostrar página novamente se ocorrer algum problema Para campos obrigatórios o JSF provê o atributo required Provê também validação básicas (domínio e tamanho)
P
<f:validateDoubleRange maximum="1" minimum="2"/> <f:validateLongRange maximum="1" minimum="2"/> <f:validateLength maximum="3" minimum="3"/>
Podemos definir nosso próprio Validator Por default não suporta validação do lado do cliente :-(
![Page 71: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/71.jpg)
71
JSF - Conversão e Validação
Exemplo: validators<h:outputText value="#{msg['page.usuarios.nome']}: " /><h:inputText id="nomeUsuario" value="#{usuarioBean.usuario.nome}" required="true"> <f:validateLength minimum="5"/></h:inputText><h:message for="nomeUsuario" errorClass="erro" /><h:outputText value="#{msg['page.usuarios.dependentes']}: " /><h:inputSecret id="numeroDependentesUsuario" value="#{usuarioBean.usuario.numeroDependentes}"> <f:validateLongRange maximum="3"/></h:inputSecret><h:message for="senhaUsuario" errorClass="erro" /><h:outputText value="#{msg['page.usuarios.senha']}: " /><h:inputSecret id="senhaUsuario" value="#{usuarioBean.usuario.senha}" required="true"> <f:validateLength minimum="6" maximum="10"/></h:inputSecret><h:message for="senhaUsuario" errorClass="erro" />
![Page 72: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/72.jpg)
72
JSF - Conversão e Validação
Exemplo: usuarioEditar.jsp<h:inputText id="cpfInput" value="#{usuarioBean.usuario.cpf}" required="true">
Dica: Como exibir asmensagens em Português Brasil? Veja o conteúdo da biblioteca
de implementação do JSF (jsf-impl-?.?_??.jar) Abra o arquivo Messages.properties Salve-o no pacote “javax.faces” no “src” do seu projeto
com o nome de “Messages_pt_BR.properties” Edite o conteúdo do arquivo
![Page 73: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/73.jpg)
73
JSF - Conversão e Validação
Conversão e Validação – Validators Duas maneiras de implementar validação Implementar a interface javax.faces.validator.Validator
Criar a classe que será o Validador Registrar no faces-config.xml Associar aos componentes desejados
Usar um método do backing bean para validação Método deve seguir a segunda assinatura:void validaCpf(FacesContext ctx, UIComponent comp, Object value) throws ValidatorException
Associar ao componente usando el:<h:inputText id="cpfUsuario" value="#{usuarioBean.usuario.cpf}" validator="#{usuarioBean.validaCpf}">
![Page 74: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/74.jpg)
74
JSF - Conversão e Validação
Exemplo: CpfValidator.javapublic class CpfValidator implements Validator { public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (value != null) { String valor = value.toString(); if (!ValidacaoHelper.validaCpf(valor)) { FacesMessage message = new FacesMessage(); message.setSeverity(FacesMessage.SEVERITY_ERROR); message.setSummary("Erro de Validação"); message.setDetail("CPF Inválido"); throw new ValidatorException(message); } } }}
![Page 75: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/75.jpg)
75
JSF - Conversão e Validação
Exemplo: faces-config.xml<faces-config> ... <validator> <validator-id>validators.CpfValidator</validator-id> <validator-class> br.com.cursojsf.view.validators.CpfValidator </validator-class> </validator> ...</faces-config> Exemplo: usuariosEditar.jsp<h:inputText id="cpfInput" value="#{usuarioBean.usuario.cpf}" required="true"> <f:validator validatorId="validators.CpfValidator" /></h:inputText>...<h:commandButton action="usuarios" value="#{msg['commons.voltar']}"
immediate="true" />
![Page 76: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/76.jpg)
76
JSF - Conversão e Validação
Atributo “immediate” Presente em <h:commandButton> e
<h:commandLink> Informa ao faces que este deve pular a fase de
ApplyRequetValues e Validation
![Page 77: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/77.jpg)
77
JSF - Tratando Eventos
Eventos e Listeners Usa o modelo de eventos JavaBean (semelhante
ao Swing)
a
Componentes criam eventos que são “consumidos” por Listeners
Listeners podem ser métodos de um backing bean ou uma classe uma classe separada
Quando o cliente ativa um componente (apertar um botão), um evento é disparado
![Page 78: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/78.jpg)
78
JSF - Tratando Eventos
Eventos e Listeners Duas variedades de eventos UI
Eventos que disparam processamento back-end Eventos que afetam apenas a forma da interface
Código para tratar esses eventos: action controllers e event listeners
Action Controllers (Action) lida com o envio completo do form
Disparados após preenchimento das propriedades do bean
Disparados após lógicas de validação Retorna Strings que afetam a navegação
![Page 79: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/79.jpg)
79
JSF - Tratando Eventos
Eventos e Listeners (cont.)
E
Event Listeners lidam com eventos da UI Geralmente são disparados antes do preenchimento
das propriedades do bean Geralmente pula a fase de validação Não afeta a navegação (continua na página atual)
N
![Page 80: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/80.jpg)
80
JSF - Tratando Eventos
Tipos de Listeners ActionListener
Disparados por commandButton ou commandLink <h:commandButton>,<h:commandLink>
Automaticamente envia o form ValueChangeListener
Disparados por combo boxes, checkboxes, radio buttons, textfields e outros
Não enviam o form automaticamente
![Page 81: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/81.jpg)
81
JSF - Tratando Eventos
Action Listeners Método de um backing bean ou classe separada
Método deve seguir a seguinte assinaturapublic void nomeDoMetodo(ActionEvent event)
Implementar interface javax.faces.event.ActionListenerpublic interface ActionListener extends FacesListener { void processAction(ActionEvent actionEvent) throws AbortProcessingException;}
Associar listener a um componente Caso seja uma classe<h:commandButton action="#{usuarioBean}"
value="Mostar/Esconder Ajuda" /> Caso seja um método<h:commandButton action="#{usuarioBean.mostraEsconderAjuda}" value="Mostar/Esconder Ajuda" />
![Page 82: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/82.jpg)
82
JSF - Tratando Eventos
ValueChangeListeners Método de um backing bean ou classe serparada
Método deve seguir a seguinte assinaturapublic void nomeDoMetodo(ValueChangeEvent event)
Implementar interface javax.faces.event.ValueChangeListenerpublic interface ValueChangeListener extends FacesListener { void processValueChange(ValueChangeEvent event) throws AbortProcessingException;}
Associar listener a um componente Caso seja uma classe<h:checkBox valueChangeListener="#{usuarioBean}" value="#{usuarioBean.mostrarAjuda}"
onclick="this.form.submit()" /> Caso seja um método<h:selectOneMenu
valueChangeListener="#{usuarioBean.mudarTipoRelatorio}" value="#{usuarioBean.tipoRelatorio}">
![Page 83: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/83.jpg)
83
JSF - Tratando Eventos
Exemplo: guess.jsp<h:inputText id="palpite" value="#{guessBean.palpite}" binding="#{guessBean.palpiteInput}" valueChangeListener="#{guessBean.onChange}" onblur="this.form.submit()"></h:inputText> GuessBean.java
public void onChange(ValueChangeEvent event) { if (event.getNewValue() == null) { mensagem = "page.guess.digiteNumero"; } else { mensagem = "page.guess.label.branco"; } }
![Page 84: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/84.jpg)
84
JSF - Ciclo de Vida da Requisição
Existem seis fases no ciclo de vida de um requisição 1. Restore view 2. Apply request values 3. Process validations 4. Update model values 5. Invoke application 6. Render response
![Page 85: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/85.jpg)
85
JSF - Ciclo de Vida da Requisição
Modelo de requisição:
![Page 86: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/86.jpg)
86
JSF - Ciclo de Vida da Requisição
1. Restore view O controlador examina a requisição que vem do
FacesServlet e extrai o “view ID”, que é determinado pelo nome da página JSP.
View State Restore Method Pode ser configurado no web.xml<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> Tem dois valores possíveis:
client = salva o estado no browser (menor consumo de memória e maior tráfego de rede)
server = salva o estado no servidor (maior consumo de memória e menor tráfego de rede)
![Page 87: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/87.jpg)
87
JSF - Ciclo de Vida da Requisição
2. Apply Request Values Cada componente deverá recuperar seu estado
corrente. Os valores das propriedades dos componentes
devem ser extraídas dos parâmetros do “request”, de “cookies” ou do “header” da requisição
![Page 88: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/88.jpg)
88
JSF - Ciclo de Vida da Requisição
3. Process Validation Cada componente (propriedade “value”) será validado de
acordo com as regras de validação definidas na aplicação As regras de validação são definidas através dos
“validators” Cada valor é então validado e caso seja inválido, uma
mensagem de erro é adicionada no FacesContext e o componente é marcado como inválido
Se um componente for marcado como inválido, o JSF pula para a fase “Render Response”
Caso nenhum componente esteja inválido o JSF passa para a próxima fase
![Page 89: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/89.jpg)
89
JSF - Ciclo de Vida da Requisição
4. Update Model Values Sua principal atividade é atribuir os valores
informados pelo usuário no formulário, para as respectivas propriedades associadas aos BackBeans (também conhecidos como Managed Beans)
Essa atribuição é feita utilizando o “converter” definido para o componente
Pode haver erro na conversão, fazendo com que o JSF dispare um erro de tempo de execução
![Page 90: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/90.jpg)
90
JSF - Ciclo de Vida da Requisição
5: Invoke application Nesta fase o controlador (controller) do JSF
chama o método associado no submit, disparando assim a camada de regras de negócio da aplicação
Todos os valores foram validados e carregados nas fases anteriores, por isso poderemos usá-los conforme necessitar.
Métodos ou outcomes carregados na propriedade “action” dos componentes
![Page 91: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/91.jpg)
91
JSF - Ciclo de Vida da Requisição
6.Render Response Fase responsável por montar a resposta onde
cada componente é processado e o resultado é unificado aos demais
![Page 92: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/92.jpg)
92
JSF - PhaseListeners
PhaseListeners São componentes capazes de escutar as fases do
ciclo de vida de uma requisição Devem implementar a interface
javax.faces.event.PhaseListener public void beforePhase(PhaseEvent event);
Determina o código que será executado antes entrar na fase public void afterPhase(PhaseEvent event);
Determina o código que será executado após concluir a fase public PhaseId getPhaseId()
Determina qual fase dverá ser escutada. Valores possíveis estão na classe “javax.faces.event.PhaseId”
![Page 93: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/93.jpg)
93
JSF - PhaseListeners
Exemplo: MyPhaseListener.javapublic class MyPhaseListener implements PhaseListener { private static final long serialVersionUID = 7700487457990644826L;
/** Metodo executado antes da fase. */ public void beforePhase(PhaseEvent event) { System.out.println("Antes da fase: " + event.getPhaseId()); } /** Metodo executado depois da fase. */ public void afterPhase(PhaseEvent event) { System.out.println("Depois da fase: " + event.getPhaseId()); } /** Metodo que indica qual fase sera "escutada". */ public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; }}
![Page 94: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/94.jpg)
94
JSF - PhaseListeners
Exemplo: faces-config.xml<faces-config>... <lifecycle> <phase-listener> br.com.cursojsf.view.listeners.MyPhaseListener </phase-listener> </lifecycle>...</faces-config>
![Page 95: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/95.jpg)
95
JSF - PhaseListeners
Exercício: Criar um PhaseListener para validação e
autenticação de usuário. Criar uma página de login e logout Criar as regras de navegação no faces-config.xml Criar método de autenticação no UsusarioBean
![Page 96: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/96.jpg)
96
JSF - PhaseListeners
Exemplo: LoginPhaseListener.javapublic class LoginPhaseListener implements PhaseListener { public void afterPhase(PhaseEvent event) { FacesContext context = event.getFacesContext(); String viewId = context.getViewRoot().getViewId(); UsuarioBean usuarioBean = (UsuarioBean) context.getApplication() .evaluateExpressionGet(context, "#{usuarioBean}", UsuarioBean.class); if (viewId.equals("/logout.jsp") || viewId.equals("/login.jsp")) { ExternalContext externalContext = context.getExternalContext(); HttpSession httpSession = (HttpSession) externalContext.getSession(false); httpSession.invalidate(); } else if (usuarioBean.getUsuarioLogado() == null) { navigateToView(context, "login"); } } private void navigateToView(FacesContext context, String view) { Application application = context.getApplication(); NavigationHandler navigationHandler = application.getNavigationHandler(); navigationHandler.handleNavigation(context, null, view); } public void beforePhase(PhaseEvent event) { /* nop */ }
public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW; }}
![Page 97: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/97.jpg)
97
JSF - PhaseListeners
Exemplo: faces-config.xml<faces-config>... <lifecycle> <phase-listener> br.com.cursojsf.view.listeners.LoginPhaseListener </phase-listener> </lifecycle>...</faces-config>
![Page 98: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/98.jpg)
98
JSF - PhaseListeners
Exemplo: login.jsp<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%><f:view><html><head><title><h:outputText value="#{msg['page.login.title']}" /></title></head><body> <div align="center"> <h1>Login</h1> <h:form id="loginForm"> <h:message for="loginForm" errorStyle="color: red;" /> <h:panelGrid columns="3"> <h:outputLabel for="cpfInput" value="#{msg['page.login.label.cpf']}:" /> <h:inputText id="cpfInput" value="#{usuarioBean.usuario.cpf}" maxlength="11" size="12" required="true" /> <h:message for="cpfInput" errorStyle="color: red;" /> <h:outputLabel for="senhaInput" value="#{msg['page.login.label.senha']}:" /> <h:inputSecret id="senhaInput" value="#{usuarioBean.usuario.senha}" maxlength="11" size="12" required="true" /> <h:message for="senhaInput" errorStyle="color: red;" /> </h:panelGrid> <h:commandButton action="#{usuarioBean.autenticar}" value="#{msg['page.login.label.entrar']}" /> </h:form> </div></body></html></f:view>
![Page 99: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/99.jpg)
99
JSF - PhaseListeners
Exemplo: logout.jsp<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%><f:view><html><head> <title> <h:outputText value="#{msg['page.logout.title']}" /> </title></head><body> <h1><h:outputText value="#{msg['page.logout.title']}" /></h1> <h:outputText value="#{msg['page.logout.mensagem']}" /> <h:form> <h:commandLink value="#{msg['page.index.title']}" action="index" /> </h:form></body></html></f:view>
![Page 100: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/100.jpg)
100
JSF - PhaseListeners
Exemplo: faces-config.xml<faces-config> <managed-bean> <managed-bean-name>usuarioBean</managed-bean-name> <managed-bean-class>br...UsuarioBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> ... </managed-bean> <navigation-rule> <navigation-case> <from-outcome>login</from-outcome> <to-view-id>/login.jsp</to-view-id> <redirect /> </navigation-case> </navigation-rule> <navigation-rule> <navigation-case> <from-outcome>logout</from-outcome> <to-view-id>/logout.jsp</to-view-id> <redirect /> </navigation-case> </navigation-rule></faces-config>
![Page 101: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/101.jpg)
101
JSF - PhaseListeners
Exemplo: UsuarioBean.javapublic class UsuarioBean {... public String autenticar() { try { usuarioLogado = usuarioBusiness.autenticarUsuario( usuario.getCpf(), usuario.getSenha()); return "index"; } catch (UsuarioInvalidoException e) { FacesMessage message = new FacesMessage(); message.setSeverity(FacesMessage.SEVERITY_ERROR); message.setDetail("Usuário ou senha inválidos!"); FacesContext.getCurrentInstance() .addMessage("loginForm", message); return null; } }}
![Page 102: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/102.jpg)
102
JSF – PhaseListeners
Exercício: Crie um BackBean capaz de alterar o idioma
corrente da aplicação. Altere a página inicial, adicionando um Combo
para chamar a alteração de idioma do bean criado.
Crie um Listener capaz perpetuar o idioma selecionada entre as requisições.
Veja os exemplos nos slides posteriores.
![Page 103: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/103.jpg)
103
JSF – PhaseListeners
Exemplo: LocaleBean.javapublic class LocaleBean { private static final List<SelectItem> LOCALES; static { LOCALES = new ArrayList<SelectItem>(2); LOCALES.add(new SelectItem("pt_BR", "Português")); LOCALES.add(new SelectItem("en", "English")); } private String locale = "pt_BR"; public String getLocale() { return locale; } public void setLocale(String locale) { this.locale = locale; } public List<SelectItem> getLocaleList() { return LOCALES; }
public void changeLocale(ValueChangeEvent event) { locale = event.getNewValue().toString(); FacesContext.getCurrentInstance().getViewRoot() .setLocale(new Locale(locale)); }}
![Page 104: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/104.jpg)
104
JSF – PhaseListeners
Exemplo: faces-config.xml<application> ... <locale-config> <default-locale>pt_BR</default-locale> <supported-locale>en</supported-locale> </locale-config></application><managed-bean> <managed-bean-name>localeBean</managed-bean-name> <managed-bean-class> br.com.cursojsf.view.LocaleBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope></managed-bean> Exemplo: index.jsp<h:selectOneMenu value="#{localeBean.locale}" valueChangeListener="#{localeBean.changeLocale}" onchange="this.form.submit()"> <f:selectItems value="#{localeBean.localeList}" /></h:selectOneMenu>
![Page 105: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/105.jpg)
105
JSF – PhaseListeners
Exemplo: LocalePhaseListener.javapublic class LocalePhaseListener implements PhaseListener { public void afterPhase(PhaseEvent event) {/* nop */}
public void beforePhase(PhaseEvent event) { FacesContext context = event.getFacesContext(); LocaleBean localeBean = (LocaleBean) context.getApplication().evaluateExpressionGet( context, "#{localeBean}", LocaleBean.class); context.getViewRoot().setLocale( new Locale(localeBean.getLocale())); }
public PhaseId getPhaseId() { return PhaseId.RENDER_RESPONSE; }}
![Page 106: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/106.jpg)
106
JSF – PhaseListeners
Exemplo: faces-config.xml...<lifecycle> <phase-listener> br.com.cursojsf.view.listeners.LocalePhaseListener </phase-listener> <phase-listener> br.com.cursojsf.view.listeners.LoginPhaseListener </phase-listener></lifecycle>...
![Page 107: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/107.jpg)
107
JSF – Exercício Desafio
Exercício: Crie um cadastro mestre-detalhe das entidades
“Estado” e “Cidade”. Veja nos slides posteriores, como o exercício
deve ficar.
![Page 108: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/108.jpg)
108
JSF – Exercício Desafio
inde
x.js
p
![Page 109: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/109.jpg)
109
JSF – Exercício Desafio
esta
dos.
jsp
![Page 110: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/110.jpg)
110
JSF – Exercício Desafio
esta
dosE
dita
r.js
p
![Page 111: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/111.jpg)
111
JSF – Exercício Desafio
cida
desE
dita
r.js
p
![Page 112: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/112.jpg)
112
JSF – Ajax4Jsf
Framework desenvolvido inicialmente pela Exadel e que mais tarde foi doado para a JBoss
Parte integrante do framework RichFaces Tem por objetivo adicionar suport a Ajax para
aplicações JSF. Extremamente fácil de utilizar
![Page 113: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/113.jpg)
113
JSF – Ajax4Jsf
Como configurar Copiar os arquivos "richfaces-api-?.?.?.jar" , "richfaces-
impl-?.?.?.jar" , "richfaces-ui-?.?.?.jar" para a pasta "WEB-INF/lib" da aplicação.
Adicionar o filtro no web.xml <filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> </filter> <filter-mapping> <filter-name>richfaces</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <context-param> <param-name>org.richfaces.SKIN</param-name> <param-value>blueSky</param-value> </context-param>
![Page 114: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/114.jpg)
114
JSF – Ajax4Jsf
Como configurar (cont.) Importar a taglib na página que desejar <%@ taglib prefix="a4j" uri="http://richfaces.org/a4j" %> Utilizar as tags <a4j:commandButton> ,
<a4j:commandLink>, <a4j:poll> ou <a4j:support>
<h:inputText id="palpite" value="#{guessBean.palpite}" binding="#{guessBean.palpiteInput}" valueChangeListener="#{guessBean.onChange}"> <a4j:support event="onkeyup" reRender="outtext" /> </h:inputText>
![Page 115: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/115.jpg)
115
JSF – Ajax4Jsf
Como funciona: Adiciona suporte a chamada Ajax para Listeners
do JSF Atua sobre um evento JavaScript Re-renderiza um ou mais componentes (nomes
separados por “,”) <h:inputText id="palpite" value="#{guessBean.palpite}" binding="#{guessBean.palpiteInput}" valueChangeListener="#{guessBean.onChange}"> <a4j:support event="onkeyup" reRender="outtext" requestDelay="1000" /> </h:inputText> <h:outputFormat id="outtext" value="#{msg[guessBean.mensagem]}"> <f:param value="#{guessBean.tentativas}" /> </h:outputFormat>
![Page 116: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/116.jpg)
116
JSF – Ajax4Jsf
Principais atributos: event: evento JavaScript (“onkeyup”,
“onmouseover”, “onclick”, etc.) reRender: ID do(s) componente(s) a ser(em) re-
renderizado(s) após receber a resposta da chmada Ajax
requestDelay: usado para regular o número de chamadas Ajax, ou seja, o evento só poderá ser disparado após X milisegundos.
![Page 117: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/117.jpg)
117
JSF – Ajax4Jsf
Principais tags: <a4j:commandButton> e <a4j:commandLink>:
Usadas para enviar uma requisição Ajax no "onclick" Herdam de <h:commandButton> e
<h:commandLink> <a4j:poll>:
Usadas para enviar uma requisição Ajax através de um timer
<a4j:support>: Permite adicionar suporte a requisições Ajax para os
componentes padrões do JSF Permite disparar as requisições em eventos JavaScript
![Page 118: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/118.jpg)
118
JSF – Ajax4Jsf
Principais tags: (cont.) <a4j:status>
Permite executar ou exibir informações sobre o andamento da requisição
<a4j:status startText="Aguarde" stopText="Concluído" />
<a4j:status> <f:facet name="start"> <h:graphicImage value="ajax_process.gif" /> </f:facet> <f:facet name="stop"> <h:graphicImage value="ajax_stoped.gif" /> </f:facet></a4j:status>
<a4j:status startText="#{msg['commons.aguarde']}" stopText="#{msg['commons.concluido']}" />
![Page 119: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/119.jpg)
119
JSF – RichFaces
Framework desenvolvido inicialmente pela Exadel e que mais tarde foi doado para a JBoos
Tem por objetivo adicionar interfaces de usuário mais ricas com suporte a Ajax para aplicações JSF.
Extremamente fácil de utilizar Dezenas de componentes Muito bem documentado com exemplos
![Page 120: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/120.jpg)
120
JSF – RichFaces
Como configurar Copiar os arquivos "richfaces-api-?.?.?.jar" , "richfaces-
impl-?.?.?.jar" , "richfaces-ui-?.?.?.jar" para a pasta "WEB-INF/lib" da aplicação.
Adicionar o filtro no web.xml <filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> </filter> <filter-mapping> <filter-name>richfaces</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <context-param> <param-name>org.richfaces.SKIN</param-name> <param-value>blueSky</param-value> </context-param>
![Page 121: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/121.jpg)
121
JSF – RichFaces
Como configurar (cont.) Importar a taglib na página que desejar <%@ taglib prefix="rich" uri="http://richfaces.org/rich" %> Utilizar as tags:
<rich:panel header="#{msg['page.login.title']}"> ... </rich:panel> Exemplos em:
![Page 122: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/122.jpg)
122
JSF – Facelets
Introdução: A principal funcionalidade é auxiliar no gerenciamento de layout
Similar ao Tiles e SiteMesh, sendo mais parecido com o segundo Funcionalidades
Compatível JSF 1.1 e JSF 1.2, tanto Sun's RI e Apache MyFaces. Implementação rápida de Templates/Decorators para Components e
Páginas Habilidade de especificar a árvore de UIComponent em arquivos
separados (UICompositions) Relatório de erro preciso em nível de Linha/Tag/Atributo Suporte completo a EL, incluindo funções Validação de EL em tempo de Build Configuração independente de XML Atributo 'jsfc' reservado que permite escrever tags HTML (jwcid Tapestry)
(Exemplo: <input id="bar" type="text" jsfc="h:inputText" value="#{foo.bar}"/>)
Funciona com qualquer RenderKit API independente do Web Container
![Page 123: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/123.jpg)
123
JSF – Facelets
Como configurar: Copiar o arquivo "jsf-facelets-?.?.?.jar" para a pasta "WEB-INF/lib" da
aplicação. Adicionar parâmetros no web.xml <web-app> ... <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.jspx</param-value> </context-param> <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>facelets.REFRESH_PERIOD</param-name> <param-value>1</param-value> </context-param> ... </web-app>
![Page 124: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/124.jpg)
124
JSF – Facelets
Como configurar: (cont.) Adicionar parâmetros no faces-config.xml
<faces-config> ... <application> ... <view-handler> com.sun.facelets.FaceletViewHandler </view-handler> ... </application> ...</faces-config>
Alterar as extenções das tags <to-view-id> para “*.jspx” no faces-config.xml
Renomear os arquivos citados nas tags <to-view-id> do faces-config.xml para “*.jspx”
![Page 125: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/125.jpg)
125
JSF – Facelets
Como configurar: (cont.) Criar um arquivo de template: /templates/padrao.jspx<?xml version="1.0" encoding="ISO-8859-1" ?><!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:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"xmlns:c="http://java.sun.com/jstl/core" xml:lang="pt" lang="pt-br"><f:view><head> <title> <h:outputText value=": #{msg['application.name']} - #{msg['application.version']} : "/> <ui:insert name="title" /> </title> <link href="styles/padrao.css" rel="stylesheet" type="text/css" /></head><body> <h3><ui:insert name="title" /></h3> <hr/> <ui:insert name="body" /></body></f:view></html>
![Page 126: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/126.jpg)
126
JSF – Facelets
Como configurar: (cont.) Altear todas as paginas para o seguinte formato:<?xml version="1.0" encoding="iso-8859-1" ?><jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jstl/core"><f:view><ui:composition template="/templates/padrao.jspx"> <ui:define name="title">#{msg['page.ajuda.title']}</ui:define> <ui:define name="body"> <h:form> <h:outputText value="#{msg['page.ajuda.texto']}" /><br /> <h:commandButton action="index" value="#{msg['commons.voltar']}" /> </h:form> </ui:define></ui:composition></f:view></jsp:root>
![Page 127: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/127.jpg)
127
JSF – Facelets
Como configurar: (cont.) Cuidado especial no LoginPhaseListener que
implementamos pois usamos “*.jsp” na implementação.
![Page 128: Curso JSF FA7](https://reader031.vdocuments.pub/reader031/viewer/2022013102/541b017e7bef0ae1168b4740/html5/thumbnails/128.jpg)
128
JSF - Referências
The J2EE(TM) 1.5 Tutorial http://java.sun.com/j2ee/1.5/docs/tutorial/doc/
Core Servlets http://www.coreservlets.com/
Strecks (Java 6) http://strecks.sourceforge.net/
The Server Side http://www.theserverside.com/
IBM developerWorks http://www-128.ibm.com/developerworks