Gerenciando Coleções Com Primefaces

download Gerenciando Coleções Com Primefaces

of 19

Transcript of Gerenciando Coleções Com Primefaces

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    1/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 1/19

    Desenvolvimento - Java

    Gerenciando Coleções com PrimefacesEste é mais um artigo que submeto ao Linha de Código, dando sequência a uma série de material, resultado obtidoatravés de pesquisas e laboratórios com meus alunos da UTFPR...

     por Everton Coimbra de Araújo

    Este é mais um artigo que submeto ao Linha de Código, dando sequência a uma série de material, resultado

    obtido através de pesquisas e laboratórios com meus alunos da UTFPR, campus Medianeira. Reforço o

    empenho e dedicação destes alunos, que foi extremamente comprometido com a pesquisa e aprendizado

    durante os meses que mantivemos contato próximo nas disciplinas que a eles eu ministrava. Isso me motivou

    muito e fazer com que o resultado dos trabalhos deles aparecesse para o mundo e, nada melhor do que o

    Linha de Código para isso.

    Neste artigo apresento o Fernando César S. Brito, que pode ser contactado pelo email

    [email protected]. O Fernando foi meu aluno durante sua graduação e agora na especialização. Me

    auxiliou na revisão técnica de meu livro de Algoritmos pela Visual Books. Tem uma grande experiência no

    desenvolvimento de aplicativos Delphi e Java com Banco Oracle, principalmente aplicações voltadas para

    o agronegócio. Já atuou como professor de desenvolvimento de sistemas e algoritmos e na orientação ao

    desenvolvimento de projetos acadêmicos para alunos de cursos da área da computação.Desta forma,

    estejam a vontade em solicitar o curriculum dele.

    Este tutorial apresenta a implementação de uma aplicação bastante simples de carrinho de compras fazendo

    uso de um recurso que nos permite manipular coleções de maneira bastante simples e eficiente, o collector.

    Poderemos compreender o quão rápido é adicionar e remover objetos de collections sem ter que escrever 

    códigos adicionais para isso em nossos managed beans.

    Introdução

    Quando desenvolvemos as aplicações, seja ela web ou não, a chance de utilizarmos coleções (collections) é

    muito grande. Uma lista de produtos ou pessoas é um exemplo disso, e com o collector (que faz parte da

    suíte de componentes do primefaces), gerenciar essas listas torna-se bastante simples, já que ele nos

    permite fazer isso sem ter que escrever códigos Java em nossos backing beans.

    Pesquisar   

     067 3 0 3

    http://www.linhadecodigo.com.br/colaborador.aspx?id=354http://www.linhadecodigo.com.br/java.aspxhttp://www.linhadecodigo.com.br/rssartigosautor.aspx?autor=354

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    2/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 2/19

    Para o exemplo de aplicação demonstrada neste material foi utilizado a IDE Eclipse Helios JEE para a

    implementação e o Glassfish V3 Prelude para receber a publicação do projeto. Os outros recursos utilizados

    foram:

    Recurso URL

    Java Server Faces 2.0 https://javaserverfaces.dev.java.net/

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

    Conhecimentos necessários

    Para a aplicação do apresentado neste material os conhecimentos abaixo se fazem necessários para um

    melhor aproveitamento do conteúdo:

    Uso do Glassfish;

    Configuração do WTP;

    Criação de projetos Web Dinâmicos;

    Criação e configuração de um Server Runtime através do Eclipse;

    Criação e manutenção de User Libraries no Eclipse;

    Uso e configuração do Primefaces em aplicações web;

    Conhecer e saber como criar e configurar um Managed/Backing Bean;

    Criando um projeto JSF

    Vamos começar a criar o projeto web. Criá-lo com o JSF e WTP (Web Tools Platform) habiltados, através do

    Eclipse, é bastante simples. Clique no menu em File→New→Other→Web→Dynamic Web Project, pressione

    Next e será exibida a janela representada pela Figura 1.

    http://www.primefaces.org/downloads.htmlhttps://javaserverfaces.dev.java.net/

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    3/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 3/19

    Figura 1 – Criando um projeto web

    1. Na janela exibida e representada pela Figura 1 informe o nome para seu projeto no campo Project

    Name.

    2. Selecione o Runtime do servidor web onde o deploy será realizado. Caso não apareça um Runtime, é

    preciso adicionar e configurar um. O Runtime representa uma configuração para um servidor web específico,

    onde, normalmente sua aplicação será publicada. No nosso exemplo é o Glassfish.

    3. Selecione a configuração para o projeto JSF. Para nosso exemplo, como selecionamos o Glassfish

    como Server podemos escolher o JSF 2.0.

    4. Clique no botão Next e uma janela de acordo à exibida pela Figura 2 será exibida.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    4/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 4/19

    Figura 2 – Configurando a estrutura de pastas

     A Figura 2 permite a criação das pastas que seu projeto possa necessitar. Para continuar, clique em Next e

    configure os dados web do projeto, conforme a Figura 3.

    Figura 3 - Configurando os dados web

    Configurando o Primefaces

    Quando escolhemos o Glassfish como Server, e selecionamos o JSF 2.0, a configuração inicial dos arquivos

    web.xml e faces-config.xml é realizado automaticamente. Para o exemplo deste material vamos alterar o

    arquivo web.xml para que aceite também qualquer arquivo com extensão .jsf, em seu contexto. Conforme aFigura 4:

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    5/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 5/19

    Figura 4 - Configurando o web.xml

     Além do arquivo web.xml é necessário adicionar o .jar do primefaces na pasta lib da WEB-INF. Para isso

    basta copiar o arquivo e colar diretamente sobre a pasta lib. Conforme a Figura 5:

    Figura 5 - Adicionando a biblioteca do primefaces 2.1

    Contextualizando

    Para facilitar o entendimento e aumentar o aprendizado, é necessário tornar claro qual o objetivo deste

    pequeno projeto. Podemos começar informando que é totalmente para fins didáticos e que as práticas

    realizadas nele podem não ser as mais adequadas a algum ambiente profissional de desenvolvimento.

    No que se refere à implementação, vamos trabalhar com um carrinho de compras, que terá a disposição uma

    lista de produtos para serem adquiridos, e esse carrinho poderá remover os produtos comprados. O

    interessante é que podemos fazer isso usando o collector sem nos preocupar com índices, tamanho de

    coleção, duplicidade de objetos e até mesmo com o “tipo da coleção”. Podemos usar um ArrayList ou um

    Vector, por exemplo.

    Disponibilizando os produtos ao carrinho

    Os produtos disponíveis ao carrinho de compras são fornecidos por uma classe de controle

    ProdutoController, que possui uma coleção de produtos estática. Claro que essa lista de produtos poderia ser 

    obtida dinamicamente através de consulta a alguma tabela no banco de dados, mas como o objetivo deste

    material é exemplificar o uso do componente collector não faremos isso. Resumindo, teremos duas classes, a

    Produto que é a nossa POJO e a ProdutoController.

    Classe Produto

     A classe Produto não requer maior explicação, porque possui apenas alguns atributos, seus métodos set e

    get e o override do equals e hashcode. Para criá-la, clique com o botão direito sobre a pasta src, e em

    New→Class, e forneça o nome do pacote em Package e da classe em Name, como demonstra a Figura 6.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    6/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 6/19

    Figura 6 - Criando a classe Produto

    Em seguida clique em Finish e escreva o código da Figura 7.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    7/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 7/19

    Figura 7 - Código da classe Produto

    Classe ProdutoController:

     A classe ProdutoController possui a lista de produtos disponíveis ao carrinho de compras. Esta lista é

    populada no construtor da classe. Para criá-la, clique com o botão direito sobre a pasta src, e em

    New→Class, e forneça o nome do pacote em Package e da classe em Name, como demonstra a figura 8.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    8/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 8/19

    Figura 8 - Criando a classe ProdutoController 

    Em seguida clique em Finish e escreva o código da Figura 9.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    9/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 9/19

    Figura 9 - Código da classe ProdutoController 

     Adicionando os produtos ao carrinho

    Os produtos disponibilizados pelo ProdutoController são adicionados ao carrinho de compras referenciado na

    classe CarrinhoController. Ela possui além da referência ao Carrinho a referência ao Produto que é utilizado

    pelo componente collector. Resumindo, teremos duas classes, a Carrinho que é a nossa pojo e a

    CarrinhoController.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    10/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 10/19

    Classe Carrinho:

     A classe Carrinho é que representa o carrinho de compras e possui apenas uma lista de produtos com seus

    respectivos métodos. Para criá-la, clique com o botão direito sobre a pasta src, e em New→Class, e forneça o

    nome do pacote em Package e da classe em Name, como demonstra a Figura 10.

    Figura 10 - Criando a classe Carrinho

    Em seguida clique em Finish e escreva o código da Figura 11.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    11/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 11/19

    Figura 11 - Código da classe Carrinho

    Classe CarrinhoController:

     A classe CarrinhoController possui a referencia a um Produto e a um Carrinho de compras. É esta classe queserá utilizada em nosso arquivo .jsf pelo componente collector. Para criá-la, clique com o botão direito sobre a

    pasta src, e em New→Class, e forneça o nome do pacote em Package e da classe em Name, como

    demonstra a Figura 12.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    12/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 12/19

    Figura 12 - Criando a classe CarrinhoController 

    Em seguida clique em Finish e escreva o código da Figura 13.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    13/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 13/19

    Figura 13 - Código da classe CarrinhoController 

    Configurando o arquivo faces-config

    O JSF 2.0 introduz anotações como uma alternativa ao arquivo de configurações Faces padrão (faces-config.xml) para configurar seu aplicativo. Portanto, ao adicionar o suporte JSF 2.0 a um projeto, não é

    obrigatório o uso do arquivo faces-config.xml (como acontecia no JSF 1.2), mas podemos adicioná-lo ao

    projeto a fim de definir configurações específicas. Em nosso exemplo vamos adicionar à ele os managed

    beans que nossa página irá utilizar. Para isso, edite o arquivo e adicione o código demonstrado na Figura 14.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    14/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 14/19

    Figura 14 - Adicionando managed beans ao faces-config.xml

    Linha 9 e 14: Damos o nome ao managed bean da mesma forma que referenciamos na página.

    Linha10 e 15: Damos o nome da classe do managed bean.

    Linha11 e 16: Definimos o escopo, no nosso exemplo será de session.

    Desse modo poderemos usar os managed beans diretamente na página, como se tivéssemos uma instância

    nela mesma.

    E se utilizássemos anotações? Seu uso dispensa a criação do faces-config.xml (como já informamos) com o

    JSF 2.0 e bastaria apenas adicionar diretamente nos managed beans as anotações necessárias. Desta

    forma, as classes CarrinhoController e ProdutoController seriam anotadas assim:

    import javax.faces.bean.ManagedBean;

    import javax.faces.bean.SessionScoped;

    @ManagedBean(name="carrinhoController")

    @SessionScoped

    public class CarrinhoController {/*foram ocultados atributos e metodos*/}

    @ManagedBean(name="produtoController")

    @SessionScoped

    public class ProdutoController {/*foram ocultados atributos e metodos*/}

    Criando a página do JSF

    Vamos criar uma página que chamaremos de carrinho.xhtml. Essa página irá possuir uma lista de produtos

    disponibilizados pelo produtoController um botão que terá a tarefa de atualizar o carrinho de compras, e outralista que exibirá os itens do carrinho de compras. É importante lembrar que esse arquivo deve estar na pasta

    WebContent.

    LOGIN

    http://www.linhadecodigo.com.br/

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    15/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 15/19

    Linha 3 a 6: Fazemos uso da taglibs para utilizar os componentes na página, como o collector.

    Figura 15 - Criando a lista de produtos disponíveis

    Linha 15: Fazemos uso da dataTable que recebe do produtoController (que configuramos no faces-

    config.xml) a lista de produtos. Temos também o atributo var onde definimos que cada linha da tabela é

    referenciada pelo valor desse atributo, no nosso exemplo, cada linha é representada por “produto”.

    Linha 17 a 28: Definimos as colunas da tabela. O atributo value recebe o valor diretamente da var produto.

    Linha 31 e 32: Fazemos uso do commandLink e em seu actionListener o método “novoProduto” do

    carrinhoController (que configuramos no faces-config.xml) é acionado para criar um novo produto.

    Linha 33 e 34: Utilizamos o collector. Em addTo definimos qual será a coleção controlada que receberá os

    novos produtos, que no nosso exemplo é a lista de produtos do carrinho de compras, e em value definimos

    qual o produto que será adicionado na coleção.

    Figura 16 - Criando o panel com o botão que atualiza produtos no carrinho

    LOGIN

    http://www.linhadecodigo.com.br/

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    16/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 16/19

    Linha 41 a 43: Criamos um commandButton e em seu atributo update atribuímos o nome do dataTable

    “carrinho” (conforme mostra a figura 17) que possui a lista de produtos do carrinho de compras.

    Figura 17 - Criando a lista de produtos do carrinho de compras

    Linha 47: Fazemos uso da dataTable que recebe do carrinhoController (que configuramos no faces-

    config.xml) a lista de produtos do carrinho de compras. Temos também o atributo var onde definimos que

    cada linha da tabela é referenciada pelo valor desse atributo, no nosso exemplo, cada linha é representada

    por “produtoCarrinho”.

    Linha 51 a 62: Definimos as colunas da tabela. O atributo value recebe o valor diretamente da var 

    produtoCarrinho.

    Linha 66 e 67: Utilizamos o collector. Em removeFrom definimos qual será a coleção controlada que terá

    objetos removidos de sua lista, que no nosso exemplo é a lista de produtos do carrinho de compras, e em

    value definimos qual o produto que será removido da coleção.

    Estrutura do projeto

    Podemos observar na Figura 18 a estrutura do projeto, onde em src estão nossos pojos Produto e Carrinho e

    nossos controllers ProdutoController e CarrinhoControler.

     Além disso, na pasta WebContent temos a biblioteca do primefaces 2.1 na pasta WEB-INF→lib e os arquivos

    web.xml e faces-config.xml em WEB-INF.

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    17/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 17/19

    Figura 18 - Estrutura pastas e arquivos do projeto

    Executando a aplicação

    O resultado da página sendo executado no browser pode ser observado na Figura 19. Não faz parte deste

    material, demonstrar como realizar o deploy no Glassfish.

    Figura 19 - Página criada executada no browser 

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    18/19

    28/05/2016 Gerenciando Coleções com Primefaces

    http://www.linhadecodigo.com.br/artigo/3139/ger enciando-colecoes-com-primefaces.aspx 18/19

     Ao clicar em adicionar ao carrinho o produto disponibilizado é adicionado através do collector (atributo addTo)

    à lista de produtos do carrinho de compras, ao clicar no botão verificar carrinho de compras, a lista do

    carrinho de compras é atualizada, exibindo então os produtos adicionados, e ao clicar em remover do

    carrinho o item selecionado é excluído da lista de compras do carrinho através do collector (atributo

    removeFrom).

    Componente Collector 

    Como foi dito no inicio deste material o componente collector permite que coleções sejam utilizadas sem

    precisar escrever códigos Java para realizar os controles, como adicionar e remover, por exemplo. Ele não é

    um componente visual, ou seja, adicionar sua declaração não causará mudança no visual de

    sua página.

    O collector possui apenas três atributos:

    value: é do tipo Object e representa o valor a ser usado nas operações da coleção.

    addTo: é do tipo Collection e representa uma instância deste tipo.

    removeFrom: é do tipo Collection e representa uma instância deste tipo.

    De maneira resumida, para o collector trabalhar é necessário apenas uma coleção e um objeto qualquer. É

    importante que o objeto ligado ao atributo value sobrescreva os métodos equals e hashcode

    Conclusões

    Poder construir aplicações web verdadeiramente ricas com o uso do primefaces é perfeitamente possível.

    Quando podemos utilizar componentes que encapsulam funcionalidades que antes deviam ser criadas pelo

    desenvolvedor a curva de aprendizado é menor e a produtividade é aumentada, além de tornar o trabalho de

    codificação muito mais simples, como o componente collector demonstrado nesse material. Fica então a

    sugestão, para que verifiquem e utilizem os outros componentes do primefaces, para que possam usufruir do

    potencial que eles podem proporcionar.

    Everton Coimbra de Araújo - Desde 1987 atua na área de treinamento e desenvolviment

    o. Como Mestre em Ciência da Computação, é professor da UNIVERSIDADE TECNOLÓ

    GICA FEDERAL DO PARANÁ, Campus Medianeira, onde leciona disciplinas relacionada

    s ao desenvolvimento de aplicações web, com Java e .NET.

    É autor dos livros Desenvolvimento para WEB com Java, Orientação a Objetos com Java - Simples, Fá

    cil e Eficiente, Algoritmo - Fundamento e Prática em sua terceira edição e dos livros Delphi - Implement

    ação e Técnicas para Ambientes Virtuais e C++ Builder - Implementação e Técnicas para Ambientes Vi

    rtuais. Todos pela VisualBooks. Pode ser contactado através do e-mail [email protected] ou everto

    [email protected].

     067 3 0 3

    http://www.linhadecodigo.com.br/colaborador.aspx?id=354

  • 8/15/2019 Gerenciando Coleções Com Primefaces

    19/19

    28/05/2016 Gerenciando Coleções com Primefaces

    Leia também

    Conhecendo a interface Map do JavaJava

    Trabalhando com a Interface Set no JavaJava

    Classes Wrappers em JavaJava

    ComboBoxModel em JavaJava

    Reduzindo a Mutabilidade em JavaJava

    Publicidade

     Anuncie | Fale Conosco | Publique

    Copyright 2016 - todos os direitos reservados para Web03

    Seja o primeiro de seus amigos a curtir isso.

    Linha de Código

    15 mil curtidasCurtir Página

    https://www.facebook.com/linhadecodigo/https://www.facebook.com/linhadecodigo/https://www.facebook.com/linhadecodigo/https://www.facebook.com/karlos.wemersonhttps://www.facebook.com/leualmdhttps://www.facebook.com/jcoelho0liveirahttps://www.facebook.com/AntiBofiahttps://www.facebook.com/peter.muanzahttps://www.facebook.com/rafinha.francischinihttps://www.facebook.com/inspirando.excelenciahttps://www.facebook.com/profile.php?id=100007032826699https://www.facebook.com/jian.babinihttps://www.facebook.com/andre.moraes.927https://www.facebook.com/wilsonmateus.sadahttps://www.facebook.com/aflcardosohttp://www.web-03.net/http://www.linhadecodigo.com.br/publique.aspxmailto:[email protected]://www.web-03.net/linhadecodigo.asphttp://www.linhadecodigo.com.br/feed/https://plus.google.com/100240100485097203227?prsrc=3https://twitter.com/linhadecodigohttp://www.facebook.com/linhadecodigohttp://www.linhadecodigo.com.br/artigo/3659/reduzindo-a-mutabilidade-em-java.aspxhttp://www.linhadecodigo.com.br/artigo/3664/comboboxmodel-em-java.aspxhttp://www.linhadecodigo.com.br/artigo/3667/classes-wrappers-em-java.aspxhttp://www.linhadecodigo.com.br/artigo/3669/trabalhando-com-a-interface-set-no-java.aspxhttp://www.linhadecodigo.com.br/artigo/3670/conhecendo-a-interface-map-do-java.aspx