Você está na página 1de 19

28/05/2016

GerenciandoColeescomPrimefaces

Pesquisar

DesenvolvimentoJava

GerenciandoColeescomPrimefaces
EstemaisumartigoquesubmetoaoLinhadeCdigo,dandosequnciaaumasriedematerial,resultadoobtido
atravsdepesquisaselaboratrioscommeusalunosdaUTFPR...
porEvertonCoimbradeArajo

67

EstemaisumartigoquesubmetoaoLinhadeCdigo,dandosequnciaaumasriedematerial,resultado
obtidoatravsdepesquisaselaboratrioscommeusalunosdaUTFPR,campusMedianeira.Reforoo
empenhoededicaodestesalunos,quefoiextremamentecomprometidocomapesquisaeaprendizado
duranteosmesesquemantivemoscontatoprximonasdisciplinasqueaeleseuministrava.Issomemotivou
muitoefazercomqueoresultadodostrabalhosdelesaparecesseparaomundoe,nadamelhordoqueo
LinhadeCdigoparaisso.
NesteartigoapresentooFernandoCsarS.Brito,quepodesercontactadopeloemail
fercesarb2@ig.com.br.OFernandofoimeualunodurantesuagraduaoeagoranaespecializao.Me
auxiliounarevisotcnicademeulivrodeAlgoritmospelaVisualBooks.Temumagrandeexperinciano
desenvolvimentodeaplicativosDelphieJavacomBancoOracle,principalmenteaplicaesvoltadaspara
oagronegcio.Jatuoucomoprofessordedesenvolvimentodesistemasealgoritmosenaorientaoao
desenvolvimentodeprojetosacadmicosparaalunosdecursosdareadacomputao.Destaforma,
estejamavontadeemsolicitarocurriculumdele.
Estetutorialapresentaaimplementaodeumaaplicaobastantesimplesdecarrinhodecomprasfazendo
usodeumrecursoquenospermitemanipularcoleesdemaneirabastantesimpleseeficiente,ocollector.
Poderemoscompreenderoquorpidoadicionareremoverobjetosdecollectionssemterqueescrever
cdigosadicionaisparaissoemnossosmanagedbeans.

Introduo
Quandodesenvolvemosasaplicaes,sejaelawebouno,achancedeutilizarmoscolees(collections)
muitogrande.Umalistadeprodutosoupessoasumexemplodisso,ecomocollector(quefazparteda
sutedecomponentesdoprimefaces),gerenciaressaslistastornasebastantesimples,jqueelenos
permitefazerissosemterqueescrevercdigosJavaemnossosbackingbeans.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

1/19

28/05/2016

GerenciandoColeescomPrimefaces

ParaoexemplodeaplicaodemonstradanestematerialfoiutilizadoaIDEEclipseHeliosJEEparaa
implementaoeoGlassfishV3Preludeparareceberapublicaodoprojeto.Osoutrosrecursosutilizados
foram:
Recurso

URL

JavaServerFaces2.0 https://javaserverfaces.dev.java.net/
Primefaces2.1

http://www.primefaces.org/downloads.html

Conhecimentosnecessrios
Paraaaplicaodoapresentadonestematerialosconhecimentosabaixosefazemnecessriosparaum
melhoraproveitamentodocontedo:
UsodoGlassfish
ConfiguraodoWTP
CriaodeprojetosWebDinmicos
CriaoeconfiguraodeumServerRuntimeatravsdoEclipse
CriaoemanutenodeUserLibrariesnoEclipse
UsoeconfiguraodoPrimefacesemaplicaesweb
ConheceresabercomocriareconfigurarumManaged/BackingBean

CriandoumprojetoJSF
Vamoscomearacriaroprojetoweb.CrilocomoJSFeWTP(WebToolsPlatform)habiltados,atravsdo
Eclipse,bastantesimples.CliquenomenuemFileNewOtherWebDynamicWebProject,pressione
NexteserexibidaajanelarepresentadapelaFigura1.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

2/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura1Criandoumprojetoweb

1.NajanelaexibidaerepresentadapelaFigura1informeonomeparaseuprojetonocampoProject
Name.
2.SelecioneoRuntimedoservidorwebondeodeployserrealizado.CasonoapareaumRuntime,
precisoadicionareconfigurarum.ORuntimerepresentaumaconfiguraoparaumservidorwebespecfico,
onde,normalmentesuaaplicaoserpublicada.NonossoexemplooGlassfish.
3.SelecioneaconfiguraoparaoprojetoJSF.Paranossoexemplo,comoselecionamosoGlassfish
comoServerpodemosescolheroJSF2.0.
4.CliquenobotoNexteumajaneladeacordoexibidapelaFigura2serexibida.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

3/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura2Configurandoaestruturadepastas
AFigura2permiteacriaodaspastasqueseuprojetopossanecessitar.Paracontinuar,cliqueemNexte
configureosdadoswebdoprojeto,conformeaFigura3.

Figura3Configurandoosdadosweb

ConfigurandooPrimefaces
QuandoescolhemosoGlassfishcomoServer,eselecionamosoJSF2.0,aconfiguraoinicialdosarquivos
web.xmlefacesconfig.xmlrealizadoautomaticamente.Paraoexemplodestematerialvamosalteraro
arquivoweb.xmlparaqueaceitetambmqualquerarquivocomextenso.jsf,emseucontexto.Conformea
Figura4:

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

4/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura4Configurandooweb.xml

Almdoarquivoweb.xmlnecessrioadicionaro.jardoprimefacesnapastalibdaWEBINF.Paraisso
bastacopiaroarquivoecolardiretamentesobreapastalib.ConformeaFigura5:

Figura5Adicionandoabibliotecadoprimefaces2.1
Contextualizando
Parafacilitaroentendimentoeaumentaroaprendizado,necessriotornarclaroqualoobjetivodeste
pequenoprojeto.Podemoscomearinformandoquetotalmenteparafinsdidticosequeasprticas
realizadasnelepodemnoserasmaisadequadasaalgumambienteprofissionaldedesenvolvimento.
Noqueserefereimplementao,vamostrabalharcomumcarrinhodecompras,queteradisposiouma
listadeprodutosparaseremadquiridos,eessecarrinhopoderremoverosprodutoscomprados.O
interessantequepodemosfazerissousandoocollectorsemnospreocuparcomndices,tamanhode
coleo,duplicidadedeobjetoseatmesmocomotipodacoleo.PodemosusarumArrayListouum
Vector,porexemplo.

Disponibilizandoosprodutosaocarrinho
Osprodutosdisponveisaocarrinhodecomprassofornecidosporumaclassedecontrole
ProdutoController,quepossuiumacoleodeprodutosesttica.Claroqueessalistadeprodutospoderiaser
obtidadinamicamenteatravsdeconsultaaalgumatabelanobancodedados,mascomooobjetivodeste
materialexemplificarousodocomponentecollectornofaremosisso.Resumindo,teremosduasclasses,a
ProdutoqueanossaPOJOeaProdutoController.

ClasseProduto
AclasseProdutonorequermaiorexplicao,porquepossuiapenasalgunsatributos,seusmtodossete
geteooverridedoequalsehashcode.Paracrila,cliquecomobotodireitosobreapastasrc,eem
NewClass,eforneaonomedopacoteemPackageedaclasseemName,comodemonstraaFigura6.
http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

5/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura6CriandoaclasseProduto

EmseguidacliqueemFinisheescrevaocdigodaFigura7.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

6/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura7CdigodaclasseProduto
ClasseProdutoController:
AclasseProdutoControllerpossuialistadeprodutosdisponveisaocarrinhodecompras.Estalista
populadanoconstrutordaclasse.Paracrila,cliquecomobotodireitosobreapastasrc,eem
NewClass,eforneaonomedopacoteemPackageedaclasseemName,comodemonstraafigura8.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

7/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura8CriandoaclasseProdutoController

EmseguidacliqueemFinisheescrevaocdigodaFigura9.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

8/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura9CdigodaclasseProdutoController

Adicionandoosprodutosaocarrinho
OsprodutosdisponibilizadospeloProdutoControllersoadicionadosaocarrinhodecomprasreferenciadona
classeCarrinhoController.ElapossuialmdarefernciaaoCarrinhoarefernciaaoProdutoqueutilizado
pelocomponentecollector.Resumindo,teremosduasclasses,aCarrinhoqueanossapojoea
CarrinhoController.
http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

9/19

28/05/2016

GerenciandoColeescomPrimefaces

ClasseCarrinho:
AclasseCarrinhoquerepresentaocarrinhodecomprasepossuiapenasumalistadeprodutoscomseus
respectivosmtodos.Paracrila,cliquecomobotodireitosobreapastasrc,eemNewClass,eforneao
nomedopacoteemPackageedaclasseemName,comodemonstraaFigura10.

Figura10CriandoaclasseCarrinho

EmseguidacliqueemFinisheescrevaocdigodaFigura11.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

10/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura11CdigodaclasseCarrinho

ClasseCarrinhoController:
AclasseCarrinhoControllerpossuiareferenciaaumProdutoeaumCarrinhodecompras.estaclasseque
serutilizadaemnossoarquivo.jsfpelocomponentecollector.Paracrila,cliquecomobotodireitosobrea
pastasrc,eemNewClass,eforneaonomedopacoteemPackageedaclasseemName,como
demonstraaFigura12.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

11/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura12CriandoaclasseCarrinhoController

EmseguidacliqueemFinisheescrevaocdigodaFigura13.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

12/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura13CdigodaclasseCarrinhoController

Configurandooarquivofacesconfig
OJSF2.0introduzanotaescomoumaalternativaaoarquivodeconfiguraesFacespadro(faces
config.xml)paraconfigurarseuaplicativo.Portanto,aoadicionarosuporteJSF2.0aumprojeto,no
obrigatrioousodoarquivofacesconfig.xml(comoacontecianoJSF1.2),maspodemosadicionloao
projetoafimdedefinirconfiguraesespecficas.Emnossoexemplovamosadicionareleosmanaged
beansquenossapginairutilizar.Paraisso,editeoarquivoeadicioneocdigodemonstradonaFigura14.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

13/19

28/05/2016

GerenciandoColeescomPrimefaces

LOGIN

Figura14Adicionandomanagedbeansaofacesconfig.xml

Linha9e14:Damosonomeaomanagedbeandamesmaformaquereferenciamosnapgina.
Linha10e15:Damosonomedaclassedomanagedbean.
Linha11e16:Definimosoescopo,nonossoexemploserdesession.
Dessemodopoderemosusarosmanagedbeansdiretamentenapgina,comosetivssemosumainstncia
nelamesma.
Eseutilizssemosanotaes?Seuusodispensaacriaodofacesconfig.xml(comojinformamos)como
JSF2.0ebastariaapenasadicionardiretamentenosmanagedbeansasanotaesnecessrias.Desta
forma,asclassesCarrinhoControllereProdutoControllerseriamanotadasassim:
importjavax.faces.bean.ManagedBean
importjavax.faces.bean.SessionScoped
@ManagedBean(name="carrinhoController")
@SessionScoped
publicclassCarrinhoController{/*foramocultadosatributosemetodos*/}
@ManagedBean(name="produtoController")
@SessionScoped
publicclassProdutoController{/*foramocultadosatributosemetodos*/}

CriandoapginadoJSF
Vamoscriarumapginaquechamaremosdecarrinho.xhtml.Essapginairpossuirumalistadeprodutos
disponibilizadospeloprodutoControllerumbotoqueteratarefadeatualizarocarrinhodecompras,eoutra
listaqueexibirositensdocarrinhodecompras.importantelembrarqueessearquivodeveestarnapasta
WebContent.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

14/19

28/05/2016

GerenciandoColeescomPrimefaces

Linha3a6:Fazemosusodataglibsparautilizaroscomponentesnapgina,comoocollector.

LOGIN

Figura15Criandoalistadeprodutosdisponveis

Linha15:FazemosusodadataTablequerecebedoprodutoController(queconfiguramosnofaces
config.xml)alistadeprodutos.Temostambmoatributovarondedefinimosquecadalinhadatabela
referenciadapelovalordesseatributo,nonossoexemplo,cadalinharepresentadaporproduto.
Linha17a28:Definimosascolunasdatabela.Oatributovaluerecebeovalordiretamentedavarproduto.
Linha31e32:FazemosusodocommandLinkeemseuactionListeneromtodonovoProdutodo
carrinhoController(queconfiguramosnofacesconfig.xml)acionadoparacriarumnovoproduto.
Linha33e34:Utilizamosocollector.EmaddTodefinimosqualseracoleocontroladaquereceberos
novosprodutos,quenonossoexemploalistadeprodutosdocarrinhodecompras,eemvaluedefinimos
qualoprodutoqueseradicionadonacoleo.

Figura16Criandoopanelcomobotoqueatualizaprodutosnocarrinho
http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

15/19

28/05/2016

GerenciandoColeescomPrimefaces

Linha41a43:CriamosumcommandButtoneemseuatributoupdateatribumosonomedodataTable
carrinho(conformemostraafigura17)quepossuialistadeprodutosdocarrinhodecompras.

Figura17Criandoalistadeprodutosdocarrinhodecompras

Linha47:FazemosusodadataTablequerecebedocarrinhoController(queconfiguramosnofaces
config.xml)alistadeprodutosdocarrinhodecompras.Temostambmoatributovarondedefinimosque
cadalinhadatabelareferenciadapelovalordesseatributo,nonossoexemplo,cadalinharepresentada
porprodutoCarrinho.
Linha51a62:Definimosascolunasdatabela.Oatributovaluerecebeovalordiretamentedavar
produtoCarrinho.
Linha66e67:Utilizamosocollector.EmremoveFromdefinimosqualseracoleocontroladaqueter
objetosremovidosdesualista,quenonossoexemploalistadeprodutosdocarrinhodecompras,eem
valuedefinimosqualoprodutoqueserremovidodacoleo.
Estruturadoprojeto
PodemosobservarnaFigura18aestruturadoprojeto,ondeemsrcestonossospojosProdutoeCarrinhoe
nossoscontrollersProdutoControllereCarrinhoControler.
Almdisso,napastaWebContenttemosabibliotecadoprimefaces2.1napastaWEBINFlibeosarquivos
web.xmlefacesconfig.xmlemWEBINF.

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

16/19

28/05/2016

GerenciandoColeescomPrimefaces

Figura18Estruturapastasearquivosdoprojeto

Executandoaaplicao
OresultadodapginasendoexecutadonobrowserpodeserobservadonaFigura19.Nofazpartedeste
material,demonstrarcomorealizarodeploynoGlassfish.

Figura19Pginacriadaexecutadanobrowser
http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

17/19

28/05/2016

GerenciandoColeescomPrimefaces

Aoclicaremadicionaraocarrinhooprodutodisponibilizadoadicionadoatravsdocollector(atributoaddTo)
listadeprodutosdocarrinhodecompras,aoclicarnobotoverificarcarrinhodecompras,alistado
carrinhodecomprasatualizada,exibindoentoosprodutosadicionados,eaoclicaremremoverdo
carrinhooitemselecionadoexcludodalistadecomprasdocarrinhoatravsdocollector(atributo
removeFrom).

ComponenteCollector
Comofoiditonoiniciodestematerialocomponentecollectorpermitequecoleessejamutilizadassem
precisarescrevercdigosJavapararealizaroscontroles,comoadicionareremover,porexemplo.Eleno
umcomponentevisual,ouseja,adicionarsuadeclarao<p:collector/>nocausarmudananovisualde
suapgina.
Ocollectorpossuiapenastrsatributos:
value:dotipoObjecterepresentaovaloraserusadonasoperaesdacoleo.
addTo:dotipoCollectionerepresentaumainstnciadestetipo.
removeFrom:dotipoCollectionerepresentaumainstnciadestetipo.
Demaneiraresumida,paraocollectortrabalharnecessrioapenasumacoleoeumobjetoqualquer.
importantequeoobjetoligadoaoatributovaluesobrescrevaosmtodosequalsehashcode

Concluses
Poderconstruiraplicaeswebverdadeiramentericascomousodoprimefacesperfeitamentepossvel.
Quandopodemosutilizarcomponentesqueencapsulamfuncionalidadesqueantesdeviamsercriadaspelo
desenvolvedoracurvadeaprendizadomenoreaprodutividadeaumentada,almdetornarotrabalhode
codificaomuitomaissimples,comoocomponentecollectordemonstradonessematerial.Ficaentoa
sugesto,paraqueverifiquemeutilizemosoutroscomponentesdoprimefaces,paraquepossamusufruirdo
potencialqueelespodemproporcionar.

EvertonCoimbradeArajoDesde1987atuanareadetreinamentoedesenvolviment
o.ComoMestreemCinciadaComputao,professordaUNIVERSIDADETECNOL
GICAFEDERALDOPARAN,CampusMedianeira,ondelecionadisciplinasrelacionada
saodesenvolvimentodeaplicaesweb,comJavae.NET.
autordoslivrosDesenvolvimentoparaWEBcomJava,OrientaoaObjetoscomJavaSimples,F
cileEficiente,AlgoritmoFundamentoePrticaemsuaterceiraedioedoslivrosDelphiImplement
aoeTcnicasparaAmbientesVirtuaiseC++BuilderImplementaoeTcnicasparaAmbientesVi
rtuais.TodospelaVisualBooks.Podesercontactadoatravsdoemaileverton@utfpr.edu.broueverto
ncoimbra@gmail.com.

67

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

18/19

28/05/2016

GerenciandoColeescomPrimefaces

Leiatambm
ConhecendoainterfaceMapdoJava
Java

TrabalhandocomaInterfaceSetnoJava
Java

ClassesWrappersemJava
Java

ComboBoxModelemJava
Java

ReduzindoaMutabilidadeemJava
Java

Publicidade

Anuncie | FaleConosco | Publique

LinhadeCdigo
CurtirPgina

15milcurtidas

Sejaoprimeirodeseusamigosacurtirisso.

Copyright2016todososdireitosreservadosparaWeb03

http://www.linhadecodigo.com.br/artigo/3139/gerenciandocolecoescomprimefaces.aspx

19/19