Professional Documents
Culture Documents
APOSTILA LAB. JAVA COM TESTES, JSF E DESIGN PATTERNS
CAPTULO 7
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 1/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 2/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Note que, aqui, estamos chamando de cliente a aplicao que est rodando na
mquina do usurio.
Para piorar, as regras de negcio rodam no computador do usurio. Isso faz com
que seja muito mais difcil depurar a aplicao, j que no costumamos ter acesso
to fcil maquina onde a aplicao est instalada. Em geral, enfrentamos
problemas de manuteno e gerenciabilidade.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 3/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 4/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
JSF uma tecnologia que nos permite criar aplicaes Java para Web utilizando
componentes visuais pr-prontos, de forma que o desenvolvedor no se preocupe
com Javascript e HTML. Basta adicionarmos os componentes (calendrios,
tabelas, formulrios) e eles sero renderizados e exibidos em formato html.
Separa as camadas
O JSF ainda tem a vantagem de ser uma especificao do Java EE, isto , todo
servidor de aplicaes Java tem que vir com uma implementao dela e h
diversas outras disponveis.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 5/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 6/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Na sua demo online, podemos ver uma lista de componentes disponveis, como
inputs, painis, botes diversos, menus, grficos e componentes drag & drop, que
vo muito alm das especificaes, ainda mantendo a facilidade de uso:
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 7/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 8/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Preparao do ambiente
Nossa aplicao Argentum precisa de uma interface web. Para isso vamos
preparar uma aplicao web comum que roda dentro de um Servlet Container.
Qualquer implementao de servlet container seria vlida e, no curso, usaremos o
Apache Tomcat 7. Uma outra boa opo seria o Jetty.
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 9/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
<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_2_0.xsd"
version="2.0">
</faces-config>
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 10/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
d. Na tela que abre, marque o checkbox com JavaServer Faces 2.0 e clique d ok:
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adicio 11/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
f. D Next mais duas vezes at chegar tela de JSF Capabilities. Nessa tela,
escolha a opo Disable Library Configuration para indicarmos para o Eclipse
que ns mesmos copiaremos os JARs do JSF.Ainda nessa tela, na parte URL
Mapping Patterns, remova o mapeamento /faces/* e adicione um novo
mapeamento como *.xhtml
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 12/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
a. Dentro do Eclipse, abra a view Servers. Para isso, pressione ctrl + 3, digite
Servers e escolha a view. Ela ser aberta na parte inferior do seu Eclipse.
b. Dentro da aba Servers clique com o boto direito do mouse e escolha New ->
Server. Se no quiser usar o mouse, voc pode fazer ctrl+3 New server.
c. Dentro da Janela New Server escolha Apache Tomcat v7.0 Server e clique em
Next.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 13/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 14/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
f. Clique em Finish.
Para import-lo, use ctrl + 3 Archive File e escolha a opo Import (Archive
file).
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 15/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Para casa...
Se voc est fazendo esse exerccio em casa, certifique-se que seu projeto
anterior est funcionando corretamente e simplesmente copie os pacotes
dele para o novo.
JSF: https://javaserverfaces.java.net/download.html
Primefaces: http://primefaces.org/downloads.html
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 16/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
6. Finalmente, para evitar confuses mais para a frente, feche o projeto que
fizemos nos outros dias de curso. Clique com o boto direito no fj22-argentum-
base e escolha a opo Close project
Enquanto isso, o pensamento component based adotado pelo JSF leva a view
como a pea mais importante -- a partir das necessidades apontadas pelos
componentes da view que o modelo chamado e populado com dados.
Diferente da forma importao de taglibs em JSPs que vimos no curso de Java para
a web (FJ-21), para importar as tags no JSF basta declararmos seus namespaces no
arquivo .xhtml. Dessa forma, teremos:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
</html>
Como todo arquivo HTML, todo o cabealho deve estar dentro da tag head e o
que ser renderizado no navegador deve ficar dentro da tag body. Uma pgina
padro para ns seria algo como:
<html ...>
<head>
<!-- cabealho aqui -->
</head>
<body>
<!-- informaes a serem mostradas -->
</body>
</html>
<html ...>
<h:head>
<!-- cabealho aqui -->
</h:head>
<h:body>
<!-- informaes a serem mostradas -->
</h:body>
</html>
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 18/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Como queremos mostrar uma saudao para o visitante da nossa pgina, podemos
usar a tag h:outputText. atravs do seu atributo value que definimos o texto que
ser apresentado na pgina.
Juntando tudo, nosso primeiro exemplo uma tela simples com um texto:
<h:head>
<title>Argentum Web</title>
</h:head>
<h:body>
<h:outputText value ="Ol JSF!" />
</h:body>
</html>
Contudo, se um pedao de texto tiver que interagir com o modelo, uma lgica
ou mesmo com outros componentes visuais, ser necessrio que ele tambm
esteja guardado em um componente.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 19/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
@ManagedBean
public class OlaMundoBean {
Ao fazer colocar o cdigo acima, estamos dizendo que h uma classe gerenciada
pelo JSF chamada OlaMundoBean que tem um mtodo getHorario -- e que o
retorno desse mtodo ser mostrado na pgina. uma forma extremamente
simples e elegante de ligar a view a mtodos do model.
Conhea a Alura.
Agora que j sabemos conectar a pgina camada de modelo, fica fcil obter
dados do usurio! Por nossa vivncia com aplicaes web, at mesmo como
usurios, sabemos que a forma mais comum de trazer tais dados para dentro da
aplicao atravs de formulrios.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 20/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
A boa notcia que no JSF no ser muito diferente! Se para mostrar dados na
pgina usamos a tag h:outputText, para trazer dados do usurio para dentro da
aplicao, usaremos a tag h:inputText. Ela far a ligao entre o atributo do seu
bean e o valor digitado no campo.
Note que a ideia a mesma de antes: como o JSF precisar interagir com os
dados desse componente, no podemos usar a tag HTML que faria o mesmo
trabalho. Em vez disso, usaremos a taglib de HTML provida pelo prprio JSF,
indicando como a informao digitada ser guardada no bean.
Apenas com esse cdigo, j podemos ver o texto Digite seu nome e o campo de
texto onde o usurio digitar. Sabemos, no entanto, que no faz sentido ter
apenas um campo de texto! preciso ter tambm um boto para o usurio
confirmar que acabou de digitar o nome e um formulrio para agrupar todas essas
tags.
Como dito antes, no entanto, o JSF tem a proposta de abstrair todo o protocolo
HTTP, o JavaScript e o CSS. Para ter uma estrutura em que o formulrio marcado
apenas como um agregador de campos e cada um dos botes internos pode ter
funes diferentes, a estratgia do JSF foi a de deixar seu form como uma tag
simples e adicionar a configurao da ao ao prprio boto.
<h:form>
<h:outputLabel for="nome" value="Digite seu nome:"/>
<h:inputText id="nome" value="#{olaMundoBean.nome}"/>
<h:commandButton value="Ok" action="#{olaMundoBean.digaOi}"/>
</h:form>
Quando o usurio clica no boto Ok, o JSF chama o setter do atributo nome do
OlaMundoBean e, logo em seguida, chama o mtodo digaOi. Repare que esta ordem
importante: o mtodo provavelmente depender dos dados inseridos pelo
usurio.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 21/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 22/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Implemente nosso primeiro cdigo JSF com apenas uma sada de texto:
<h:body>
<h:outputText value="Ola Mundo" />
</h:body>
</html>
3. Verifique o cdigo fonte gerado pela pgina. Repare que ele no nada mais que
simples HTML. Para isso, na maior parte dos navegadores, use ctrl + U.
4. Alm de usar mensagens fixas, poderamos fazer com que a mensagem seja
devolvida de uma classe responsvel por prover objetos para uma view: um dos
chamados ManagedBeans. Vamos comear criando essa classe contendo apenas a
mensagem inicial.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 23/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
@ManagedBean
public class OlaMundoBean {
5. Alteremos o arquivo xhtml, ento, para que ele use a mensagem Quem voc?
que escrevemos hard-coded na classe OlaMundoBean. Usaremos a Expression
Language especfica do JSF para isso, que capaz de pegar informaes de
qualquer classe configurada como um ManagedBean.
...
<h:body>
<h:outputText value="#{olaMundoBean.mensagem}" />
</h:body>
...
<h:body>
<h:form>
<h:outputText value="#{olaMundoBean.mensagem}" /><br />
<h:inputText value="#{olaMundoBean.nome}" />
<h:commandButton action="#{olaMundoBean.nomeFoiDigitado}"
value="Ok"/>
</h:form>
</h:body>
Isto , falta adicionarmos o atributo nome e seu getter pgina, como fizemos
com a mensagem, no outro exerccio. Adicione classe OlaMundoBean o atributo e
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 24/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
seu getter.
@ManagedBean
public class OlaMundoBean {
...
private String nome;
@ManagedBean
public class OlaMundoBean {
// ...tudo o que j existia aqui
Agora que j aprendemos o bsico do JSF, nosso objetivo listar em uma pgina
as negociaes do web service que o Argentum consome. Nessa listagem,
queremos mostrar as informaes das negociaes carregadas -- isto , queremos
uma forma de mostrar preo, quantidade e data de cada negociao. E a forma
mais natural de apresentar dados desse tipo , certamente, uma tabela.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 25/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
At poderamos usar a tabela que vem na taglib padro do JSF, mas ela
bastante limitada e no tem pr-definies de estilo. Isto , usando a taglib
padro, teremos sim uma tabela no HTML, mas ela ser mostrada da forma mais
feia e simples possvel.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Argentum</title>
</h:head>
<h:body>
<p:dataTable var="negociacao" value="#{argentumBean.negociacoes}">
</p:dataTable>
</h:body>
</html>
@ManagedBean
public class ArgentumBean {
Basta colocar a chamada do web service naquele bloco de cdigo que chamado
apenas na criao do objeto, isto , no construtor. Ao armazenar a listagem em um
atributo, o getter de negociaes passa a simplesmente devolver a referncia,
evitando as mltiplas chamadas a cada requisio.
@ManagedBean
public class ArgentumBean {
public ArgentumBean() {
ClienteWebService cliente = new ClienteWebService();
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 27/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
this.negociacoes = cliente.getNegociacoes();
}
Consulte as vantagens do curso Lab. Java com Testes, JSF e Design Patterns.
A forma clssica de resolver esse problema seria atravs de um getter que traria
a data formatada por um SimpleDateFormat. Mas, assim como a JSTL vista no curso
de Java para a Web, o JSF tambm tem uma tag para formatar valores, nmeros e,
claro, datas. Essas tags e muitas outras, so parte da biblioteca fundamental de
tags lgicas do JSF e, para us-las, ser necessrio importar tal taglib.
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 28/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:body>
<p:dataTable var="negociacao" value="#{argentumBean.negociacoes}">
1. Use ctrl + N HTML para criar um novo arquivo na pasta WebContent chamado
index.xhtml. Como j fizemos antes, clique em Next e, na tela seguinte, escolha o
template xhtml 1.0 transitional.
O Eclipse vai gerar um arquivo com um pouco de informaes a mais, mas ainda
muito parecido com o seguinte, onde mudamos o title:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Argentum Web</title>
</head>
<body>
</body>
</html>
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 29/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
2. Como vamos usar o JSF nesse arquivo e j temos at mesmo o JAR primefaces-
3.x.jar adicionado ao projeto (veja em WebContent/WEB-INF/lib) basta declarar os
namespaces das taglibs do JSF e do Primefaces, que usaremos no exerccio.
Alm disso, para que os componentes consigam incluir seu CSS nossa pgina,
altere as tags head e body de forma a usar suas verses gerenciadas pelo JSF:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Argentum Web</title>
</h:head>
<h:body>
</h:body>
</html>
</p:dataTable>
@ManagedBean
public class ArgentumBean {
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 30/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
@ManagedBean
public class ArgentumBean {
public ArgentumBean() {
negociacoes = new ClienteWebService().getNegociacoes();
}
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 31/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
...
<p:column headerText="Data">
<h:outputText value="#{negociacao.data.time}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:outputText>
</p:column>
...
O componente p:dataTable sabe listar items, mas no pra por a. Ele j vem
com vrias outras funcionalidades frequentemente necessrias em tabelas j
prontas e fceis de usar.
Muitos dados
Uma soluo clssica para resultados demais mostr-los aos poucos, apenas
conforme o usurio indicar que quer ver os prximos resultados. Estamos, claro,
falando da paginao dos resultados e o componente de tabelas do Primefaces j a
disponibiliza!
Essa pequena mudana j traz uma visualizao mais legal para o usurio, mas
estamos causando um problema silencioso no servidor. A cada vez que voc
chama uma pgina de resultados, a cada requisio, o ArgentumBean recriado e
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 32/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
@ManagedBean
@ViewScoped
public class ArgentumBean {
...
@ManagedBean
@ViewScoped
public class ArgentumBean implementes Serializable {
...
Outra situao clssica que aparece quando lidamos com diversos dados
precisarmos v-los de diferentes formas em situaes diversas.
nome. Mas caso precisemos pegar os contatos de todas as pessoas de uma regio,
melhor que a tabela esteja ordenada, por exemplo, pelo DDD.
<h:form id="listaNegociacao">
<p:dataTable var="negociacao" value="#{argentumBean.negociacoes}">
2. Para evitar chamar o webservice a cada vez que pedimos os prximos resultados
paginados, adicione a anotao @ViewScoped classe ArgentumBean:
@ManagedBean
@ViewScoped
public class ArgentumBean {
...
}
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 35/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
@ManagedBean
@ViewScoped
public class ArgentumBean implements Serializable {
...
}
6. Como estamos permitindo a ordenao das colunas da nossa tabela, temos que
colocar nossa p:dataTable dentro de um h:form:
<h:form id="listaNegociacao">
<p:dataTable var="negociacao" value="#{argentumBean.negociacoes}">
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 36/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Isso ocorre porque o JSF tenta abstrair o mundo HTTP e assim fica mais
perto do desenvolvimento Desktop tradicional. Ele esconde do
desenvolvedor o fato de que uma URL est sendo chamada. Em vez disso,
para o desenvolvedor, como se botes efetivamente chamassem mtodos
ou eventos dentro de um Managed Bean.
CAPTULO ANTERIOR:
PRXIMO CAPTULO:
Blog Caelum
Cursos Online
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 37/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
Newsletter
Casa do Cdigo
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 38/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 39/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 40/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 41/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 42/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 43/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 44/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 45/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 46/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 47/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 48/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 49/50
24/08/2017 Introduo ao JSF e Primefaces - Lab. Java com Testes, JSF e Design Patterns
https://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-12-exercicio-opcional-adici 50/50