DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

DWR – Directed Web Remoting – Parte II.I

Neste artigo vamos abordar algumas funcionalidades um pouco mais avançadas do DWR.

 

Dando continuidade ao nosso artigo vamos iniciar a segunda parte. Neste artigo vamos abordar algumas funcionalidades um pouco mais avançadas do DWR.

Vamos também utilizar alguns exemplos com acesso ao banco de dados (MySql).

 

Parte 2 – Combos e Grids(addOptions(), addRows())

 

Introdução

 

Vimos como instalar, configurar e rodar o DWR, agora vamos ver como é feito um preenchimento de uma combo utilizando o DWR.

 

Vamos utilizar um banco de dados(MySql), temos as seguintes tabelas de exemplo como foi citado no artigo anterior. Vemos agora a estrutura que iremos utilizar no MySql.

 

Nome do Banco: test

 

Tabela: pessoa

Colunas:

Tipo:

Id

integer

Nome

varchar

Endereço

varchar

Cidade

varchar

Telefone

varchar

 

Tabela: usuário

Colunas:

Tipo:

Id

int

Login

varchar

Senha

varchar

 

Sql para gerar o banco:

http://www.milfont.org/blog/wp-content/upload/artigoDWR/BancoArtigoDWR0061107_1509.sql

Agora o próximo passo será criar uma simples classe para conexão com o banco, chamaremos essa classe de ConectaBanco.java localizada no pacote com.celulajava.palestradwr.dao

 

Precisaremos também de algumas classes DAO’s para executarem os sql’s. Então criaremos os seguintes DAO’s: DAOPessoa.java e DAOUsuario.java, que também estarão localizadas no pacote DAO.

 

Não vamos muito focar nos DAO’s e nem no banco, apenas saiba que estaremos utilizando um banco de dados para recuperar valores.

 

Bem agora temos nosso ambiente pronto para acessarmos o banco de dados, vamos dar inicio então aos tão esperados exemplos.

 

Parte 2.1 – Combos (addOptions())

 

Criando combos(DWRUtil.addOptions())

 

O DWR tem uma lib chamada util.js, que é nela que se localiza as principais funcionalidades do DWR. Vamos falar agora sobre o addOptions() que tem como finalidade gerar e popular uma comboBox(<select></select>), e/ou uma lista numerada ou de símbolos do html(<ul></ul>, <ol></ol>).

 

Reutilizando a estrutura do nosso projeto anterior vamos criar um jsp chamado combos.jsp, e logo em seguida um link na nossa index.jsp que tenha acesso ao combos.jsp, criaremos também só por motivo didático um novo js, destinado apenas para as combos, vamos chama-lo de combos.js, veja abaixo:

 

Trecho de código na index.jsp.

<br>

<a href=”combos.jsp”>Exemplos de Combos</a>

 

dwrp21fig012.JPG

Figura 1. Combo.jsp

 

Observe que os importes das bibliotecas .js são os mesmo, exceto pelo novo importe, que é o do nosso combos.js.

 

Explicando o addOptions();

O addOptions é uma função da biblioteca util.js que tem a finalidade de gerar uma combo dinâmica utilizando o conceito de ájax e que rode em qualquer browser. Com ela você poderá gerar uma combo com dados de um banco, com o formato de arrays, map, list de beans e ainda gerar uma lista numerada.

 

Utilizando o addOptions:

Primeiro entenda a sintaxe de um select.

<select>

      <option value=”valor”>Texto</option>

</select>

 

  1. Array:  Recebe um simples Array com texto e valor.
    1. DWRUtil.addOptions(selectid, array);

 

  1. Array de Objetos (texto da <option> = valor da <option>): Cria a combo a partir de um array de objetos, e definindo que o valor da <option> será o mesmo do texto da <option> do elemento <select>
    1. DWRUtil.addOptions(selectid, arrayObjects, propriedade);
    2. Exemplo de Array de Objetos: List de Beans, List de Maps, Collection etc.
    3. Exemplo da option gerada:

DWRUtil.addOptions(“combo”, listBeans, “nome”);

    <option value=”Handerson”>Handerson</option>

 

  1. Array de Objetos (texto da <option> != valor da <option>): Cria a combo a partir de um array de objetos, definindo que o valor da <option> será diferente do texto da <option> do elemento <select>
    1. DWRUtil.addOptions(selectid, arrayObjects, valorPropriedade, valorTexto);
    2. Exemplo de Array de Objetos: List de Beans, List de Maps, Collection etc
    3. Exemplo da option gerada:

DWRUtil.addOptions(“combo”, listBeans, “id”, “nome”);

<option value=”2”>Handerson</option>

 

  1. Objeto: Gerar a combo a partir de um Objeto qualquer, caso você utilize um Bean(Pessoa) com as seguintes propriedades(cidade, endereço, nome, telefone), ele irá carregar no campo value o valor da propriedade e no texto ele irá colocar o nome da propriedade.
    1. DWRUtil.addOptions(selectid, arrayObjects, valorPropriedade);
    2. Exemplo de Objeto: Beans
    3. Exemplo da option gerada:

DWRUtil.addOptions(“combo”, bean, “nome”);

<option value=”1”>id</option>

<option value=”Handerson”>nome</option>

<option value=”Fortaleza”>cidade</option>

<option value=”Rua Francisco”>endereco</option>

<option value=”3444444”>telefone</option>

 

  1. Mapa de Objetos: Gera uma combo a partir de um Map.
    1. DWRUtil.addOptions(selectid, map);
    2. Exemplo de Objeto: Map, Hashtable, HashMap.
    3. Exemplo da option gerada:

DWRUtil.addOptions(“combo”, map);

<option value=”2”>Handerson</option>

 

 

  1. Lista de <ol> ou <ul>:  Gera uma lista numerada ou com símbolo.
    1. DWRUtil.addOptions(ul, list, valorPropriedade);
    2. Exemplo de Objeto: List, Array, List de Beans.
    3. Exemplo da option gerada:

DWRUtil.addOptions(“ul”, listBean,  “nome”);

?  Chirstiano Milfont

?  Handerson Frota

Tag html: <ul id="ul"></ul>

DWRUtil.addOptions(“ol”, listBean,  “nome”);

1. Chirstiano Milfont

2. Handerson Frota

Tag html: <ol id="ol"></ol>

 

Agora para entendermos melhor, vamos visualizar como ficou na nossa camada do JAVA, que é o nosso FacadeAjax e DAO’s, para facilitar a compreensão de como serão utilizado os acessos e chamadas dos nossos métodos, e saberemos também o tipo de retorno e como esta sendo criado para o envio ao nosso JS. Vamos utilizar os seguintes métodos para acessar o banco de dados.

 

FacadeAjax:

/**

* Método que faz um simples select no banco e retorna um list de beans Pessoa.

       *

       * @return listResult - List de Object Bean Pessoa

       *

       * @throws Throwable

       * @throws Exception

       */

      public List selectAllPessoa() throws Throwable, Exception{

            List<Pessoa> listResult = new ArrayList();

           

            listResult = DAOPessoa.selectAllPessoa();

           

            return listResult;

      }

 

/**

* Executa um select na tabela pessoa, mais so retorna um objeto Pessoa.

       *

       * @return pessoa - Object Bean Pessoa.

       * @throws Throwable

       * @throws Exception

       */

      public Pessoa selectPessoa() throws Throwable, Exception{

            List<Pessoa> listResult = new ArrayList();

            Pessoa pessoa = new Pessoa();

           

            listResult = DAOPessoa.selectAllPessoa();

           

            pessoa = listResult.get(0);

           

            return pessoa;

      }

 

/**

* Executa um select na tabela pessoa e retorna um Map com os *valores(id, nome)

       *

       * @return mapResult - Map com os dados do select.

       *

       * @throws Throwable

       * @throws Exception

       */

      public Map selectPessoaMap() throws Throwable, Exception{

            Map mapResult = new HashMap<Pessoa, Pessoa>();

           

            mapResult = DAOPessoa.selectPessoaMap();

           

            return mapResult;

      }

 

 

DAOPessoa:

/**

* Método que faz um simples select no banco e retorna um list de beans Pessoa

       *

       * @return dadosPessoaList List de Object Bean Pessoa

       * */

      public static List selectAllPessoa() throws Throwable, Exception{

            List<Pessoa> dadosPessoaList = new ArrayList();     

 

        PreparedStatement stmt = null;

        ResultSet rs = null;

       

stmt = conecta.getConnection().prepareStatement("select * from pessoa order by nome asc");

     

        rs = stmt.executeQuery();

       

        Pessoa pessoa = null;

        while(rs.next()){

            pessoa = new Pessoa();

           

            String id         = rs.getString("id");

            String nome       = rs.getString("nome");

                  String endereco   = rs.getString("endereco");

                  String cidade     = rs.getString("cidade");

                  String telefone   = rs.getString("telefone");

                 

                  pessoa.setId(id);

                  pessoa.setNome(nome);

                  pessoa.setEndereco(endereco);

                  pessoa.setCidade(cidade);

                  pessoa.setTelefone(telefone);

                 

            dadosPessoaList.add(pessoa);                  

            }

       

        stmt.close();

        rs.close();

        conecta.closeConnection();

       

            return dadosPessoaList;

      }

     

/**

* Executa um select na tabela pessoa e retorna um Map com os valores(id, nome)

       *

       * @return mapResult - Map com os dados do select.

       *

       * @throws Throwable

       * @throws Exception

       */

      public static Map selectPessoaMap() throws Throwable, Exception{

            Map dadosPessoa = new HashMap();  

 

        PreparedStatement stmt = null;

        ResultSet rs = null;

       

stmt = conecta.getConnection().prepareStatement("select * from pessoa order by nome asc");

     

        rs = stmt.executeQuery();

       

        while(rs.next()){

            String id         = rs.getString("id");

            String nome       = rs.getString("nome");

                 

            dadosPessoa.put(id, nome);

            }

       

        stmt.close();

        rs.close();

        conecta.closeConnection();

       

            return dadosPessoa;

      }

 

Como foi visto temos métodos que acessão o banco de dados, métodos simples apenas para  exemplificar.

 

Bem agora que vimos os nossos métodos que iremos utilizar, vejamos os exemplos:

 

Criamos uma função JS para limpar as combos, sendo a mesma genérica, recebendo apenas o nome do select e/ou as tags de lista numerada que você deseja limpar:

 

function cleanAddOptions(local){

      DWRUtil.removeAllOptions(local);

}

 

Vou listar abaixo os exemplos equivalentes a explicação das assinaturas do addOptions(), e neles o respectivo código JSP e JS.

 

Exemplo 1 e 2(Array, Array de Objetos (texto da <option> = valor da <option>)):

 

JSP

<strong>1,2 - DWRUtil.addOptions("combo1_2", listBeans, "nome");</strong><br>

Exemplo combo 1 e 2:

<a href="javascript:carregaCombo1_2()">Carregar</a> /

<a href="javascript:cleanAddOptions('combo1_2')" >Limpar</a>

<select id="combo1_2"></select>

 

JS

/**

* Função que acessa o método da classe java(FacadeAjax), e retorna

* como callback para a função montaXXX();

 */

function carregaCombo1_2(){

      FacadeAjax.selectAllPessoa(montaCombo1_2);

}

 

/**

 * Função de callback que limpa a combo e depois a remonta.

 * O processo para remover a combo é necessário se não os valores

 * seram somados com os existentes.

 * @param {Object} listBeans

 */

function montaCombo1_2(listBeans){

      DWRUtil.removeAllOptions("combo1_2");

      DWRUtil.addOptions("combo1_2", listBeans, "nome");

}

 

Exemplo 3 (Array de Objetos (texto da <option> != valor da <option>):):

 

JSP

<strong>3 - DWRUtil.addOptions("combo3", listBeans, "id", "nome");</strong><br>

Exemplo combo 3:

<a href="javascript:carregaCombo3()" >Carregar</a> /

<a href="javascript:cleanAddOptions('combo3')" >Limpar</a>

<select id="combo3"></select>

 

JS

/**

* Função que acessa o método da classe java(FacadeAjax), e retorna

* como callback para a função montaXXX();

 */

function carregaCombo3(){

      FacadeAjax.selectAllPessoa(montaCombo3);

}

 

/**

 * Função de callback que limpa a combo e depois a remonta.

 * O processo para remover a combo é necessário se não os valores

 * seram somados com os existentes.

 * @param {Object} listBeans

 */

function montaCombo3(listBeans){

      DWRUtil.removeAllOptions("combo3");

      DWRUtil.addOptions("combo3", listBeans, "id", "nome");

}

 

Exemplo 4(Objeto):

 

JSP

<strong>4 - DWRUtil.addOptions("combo4", bean, "nome");</strong><br>

Exemplo combo 4:

<a href="javascript:carregaCombo4()" >Carregar</a> /

<a href="javascript:cleanAddOptions('combo4')" >Limpar</a>

<select id="combo4"></select>Até o próximo.

 

JS

/**

* Função que acessa o método da classe java(FacadeAjax), e retorna

* como callback para a função montaXXX();

 */

function carregaCombo4(){

      FacadeAjax.selectPessoa(montaCombo4);

}

 

/**

 * Função de callback que limpa a combo e depois a remonta.

 * O processo para remover a combo é necessário se não os valores

 * seram somados com os existentes.

 * @param {Object} listBeans

 */

function montaCombo4(bean){

      DWRUtil.removeAllOptions("combo4");

      DWRUtil.addOptions("combo4", bean, "nome");

}

 

Exemplo 5(Mapa de Objetos):

 

JSP

<strong>5 - DWRUtil.addOptions("combo5", maps);</strong><br>

Exemplo combo 5:

<a href="javascript:carregaCombo5()" >Carregar</a> /

<a href="javascript:cleanAddOptions('combo5')" >Limpar</a>

<select id="combo5"></select>

 

JS

/**

* Função que acessa o método da classe java(FacadeAjax), e retorna

* como callback para a função montaXXX();

 */

function carregaCombo5(){

      FacadeAjax.selectPessoaMap(montaCombo5);

}

 

/**

 * Função de callback que limpa a combo e depois a remonta.

 * O processo para remover a combo é necessário se não os valores

 * seram somados com os existentes.

 * @param {Object} listBeans

 */

function montaCombo5(maps){

      DWRUtil.removeAllOptions("combo5");

      DWRUtil.addOptions("combo5", maps);

}

 

 

 

Exemplo 6(Lista de <ol> ou <ul>):

 

JSP - <UL>

<strong>6 - DWRUtil.addOptions("ul", listBeans, "nome"); / DWRUtil.addOptions("ol", listBeans, "nome");</strong><br>

Exemplo 6:<br>

Exemplo com a tag UL<br><a href="javascript:carregaUl()" >Carregar UL</a> /

<a href="javascript:cleanAddOptions('ul')" >Limpar</a><br>

<ul id="ul"></ul>

 

JS

/**

* Função que acessa o método da classe java(FacadeAjax), e retorna

* como callback para a função montaXXX();

 */

function carregaUl(){

      FacadeAjax.selectAllPessoa(montaUl);

}

 

/**

 * Função de callback que limpa a combo e depois a remonta.

 * O processo para remover a combo é necessário se não os valores

 * seram somados com os existentes.

 * @param {Object} listBeans

 */

function montaUl(listBeans){

      DWRUtil.removeAllOptions("ul");

      DWRUtil.addOptions("ul", listBeans, "nome");

}

 

JSP –  <OL>

Exemplo com a tag OL<br><a href="javascript:carregaOl()" >Carregar OL</a> /

<a href="javascript:cleanAddOptions('ol')" >Limpar</a><br>

<ol id="ol"></ol>

 

JS

/**

* Função que acessa o método da classe java(FacadeAjax), e retorna

* como callback para a função montaXXX();

 */

function carregaOl(){

      FacadeAjax.selectAllPessoa(montaOl);

}

 

/**

 * Função de callback que limpa a combo e depois a remonta.

 * O processo para remover a combo é necessário se não os valores

 * seram somados com os existentes.

 * @param {Object} listBeans

 */

function montaOl(listBeans){

      DWRUtil.removeAllOptions("ol");

      DWRUtil.addOptions("ol", listBeans, "nome");

}

 

Estão listados acima as principais assinaturas do addOptions(). Podemos ver o quão fácil é gerar uma combo ou lista dinâmica com o DWR.

 

Para baixar esse projeto para executar os exemplos basta acessar o link abaixo:

http://www.milfont.org/blog/wp-content/upload/artigoDWR/versao2.1/PalestraDWR.rar

 

Veremos no próximo artigo (Parte 2.2) o addRows():

 

Handerson Frota

(handersonbf@gmail.com)





    7 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Handerson Brito Frota
Quem quiser baixar o projeto deste artigo basta acessar: http://www.handersonfrota.com.br/?page_id=12 Abraços
[há +1 ano] - Responder

 

Alessandro Martins
Gostaria de saber se é correto (e como fazer) para incluir dados na base via dwr. Por exemplo, uma classe que insira dados e retorne um valor booleano que possa ser capturado? É correto faz\er isot? COmo fazer?
[há +1 ano] - Responder

 

Handerson Brito Frota
Cara depende de como voce quer fazer isso, envia um email pra mim que te explico melhor por email, se caso desejar blz, pq eh complicado explicar por aqui handersonbf@gmail.com
[há +1 ano] - Responder
 

Paulo Junior
Esta exatamente procurando um artigo desse para começar a mecher com o DWR. Parabéns
[há +1 ano] - Responder

 

Kalil Mendonça Valadares Peixoto
Handerson, gostaria de saber se é possível que o primeiro option do select fique vazio, e que ele popule apenas a partir do segundo....como eu estou fazendo isso de maneira dinâmica puxando do banco, e ele já me traz logo que eu acesso a página, não queria que já fosse mostrando o dado, mas sim o primeiro em branco, e só quando ele fosse na seta que mostrasse os outros...não sei se fui bem claro,mas se puder me ajudar eu agradeço...
[há +1 ano] - Responder

 

[autor] Handerson Brito Frota
Olá Kalil, deixa ver se entendi. Você tem alguns combos, o primeiro já é carregado imediatamente e quando você seleciona uma opção dele, logo em seguida ele carrega o outro combo é isso ? E agora você quer que ele NÃO carregue o primeiro, alias nenhum, e que VOCÊ dispare para ele carregar a primeira combo, ai logo em seguida ele continua com o processo que já estava. Bem se foi isso que entendi, é simples. No lugar de você ter a chamada da função que carrega a primeira combo, você cria um link, botão seja o que for, que o usuário tenha que clicar para disparar a chamada que carrega essa primeira combo. Bem é só isso. Ficou claro ? Se não pode enviar a sua dúvida. Abraços
[há +1 ano] - Responder
 

[autor] Handerson Brito Frota
Cara para facilitar já te respondi por email ok. Qualquer dúvida pode enviar direto para meu email se caso deseje. Abraços
[há +1 ano] - Responder
 



Publicidade
Autor
Handerson Brito Frota

Handerson Brito Frota (handersonbf@gmail.com), cursando 8º semestre do curso de Bacharel em Ciências da Computação pela Faculdade Lourenço Filho, trabalha com desenvolvimento de sites e sistemas web desde 1998 e com Java desde 2001. Já atuando como Analista Programador Java em várias empresas, Líder...


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03