Adicionar Valores Para Vários Bean

2 respostas
Jair_Rillo_Junior

Bom pessoal,

estou tentando criar um método no qual eu preencho os dados de vários Bean de uma forma simples e flexível.

Eu estou tentando criar um método, no qual eu passo um certo Bean como Parametro e passo um HashMap contendo os valores, como por exemplo:

HashMap map = new HashMap();
map.put("codigo",1);
map.put("nome","Junior");
map.put("cidade",'Bauru");
addValuesToBean(Clientes,map);

esse HashMap poderia representar um Cliente no sistema por exemplo.
Eu passaria esse HashMap e a meu bean, no caso Clientes para o método e ele preencheria os valores automaticamente.
O Algoritmo é mais ou menos assim.
Quando o método for invocado, utilizará reflection na classe que fosse passado como Parâmetro, verificará todos os atributos e e seus métodos (getters e setters), irá comparar os valores do HashMap com o nome do atributo, e utilizar o setXXX(map.get(objeto));

Pegar os valores via reflection sem problemas, isso o método já está fazendo, o problema é quando eu tento criar esse método genérico para todos os meus Bean, na assinatura do meu método, não posso por minha classe direto, e sim uma superclasse de todos meus bean, no caso eu utilizei Object, algo como:

public void addValuesToBean(Object objeto,HashMap map) {..}

Pois vou utilizar isso tanto para um Bean Clientes, como outro Produtos, outro Funcionarios e assim vai…
A pergunta é…
como dentro do método addValuesToBean, eu vou utilizar os métodos setXXX()?, já que no Object não possui esses métodos? Por exemplo:, supondo que estou com o Clientes, e o Clientes tem o setNome(), eu capturei o método setNome via reflection (até aqui eu consegui fazer na programação), como eu vou poder utilizá-lo?queria algo mais ou menos assim:

objeto.method.getName()(map.get("nome"));
o method.getName(), seria algo como “setNome…”

Tem algum modo de conseguir utilizar um método de uma classe que eu capturei via reflection?

Espero que a pergunta fique clara.

Obrigado

Junior

2 Respostas

cv1

Vou responder correndo, se precisar de mais ajuda da um toque:

  • De uma olhada na API java.beans, especialmente nos PropertyEditors.
  • Commons-BeanUtils da Jakarta ja tem isso que vc quer fazer.
  • foo.getClass().getDeclaredMethod(“nomeDoMetodo”, new Class[]);
D

Este método “addValuesToBean(Clientes,map);” foi vc q implementou ou o java tem isto?!

ManchesteR:
Bom pessoal,

estou tentando criar um método no qual eu preencho os dados de vários Bean de uma forma simples e flexível.

Eu estou tentando criar um método, no qual eu passo um certo Bean como Parametro e passo um HashMap contendo os valores, como por exemplo:

HashMap map = new HashMap();
map.put("codigo",1);
map.put("nome","Junior");
map.put("cidade",'Bauru");
addValuesToBean(Clientes,map);

esse HashMap poderia representar um Cliente no sistema por exemplo.
Eu passaria esse HashMap e a meu bean, no caso Clientes para o método e ele preencheria os valores automaticamente.
O Algoritmo é mais ou menos assim.
Quando o método for invocado, utilizará reflection na classe que fosse passado como Parâmetro, verificará todos os atributos e e seus métodos (getters e setters), irá comparar os valores do HashMap com o nome do atributo, e utilizar o setXXX(map.get(objeto));

Pegar os valores via reflection sem problemas, isso o método já está fazendo, o problema é quando eu tento criar esse método genérico para todos os meus Bean, na assinatura do meu método, não posso por minha classe direto, e sim uma superclasse de todos meus bean, no caso eu utilizei Object, algo como:

public void addValuesToBean(Object objeto,HashMap map) {..}

Pois vou utilizar isso tanto para um Bean Clientes, como outro Produtos, outro Funcionarios e assim vai…
A pergunta é…
como dentro do método addValuesToBean, eu vou utilizar os métodos setXXX()?, já que no Object não possui esses métodos? Por exemplo:, supondo que estou com o Clientes, e o Clientes tem o setNome(), eu capturei o método setNome via reflection (até aqui eu consegui fazer na programação), como eu vou poder utilizá-lo?queria algo mais ou menos assim:

objeto.method.getName()(map.get("nome"));
o method.getName(), seria algo como “setNome…”

Tem algum modo de conseguir utilizar um método de uma classe que eu capturei via reflection?

Espero que a pergunta fique clara.

Obrigado

Junior

Criado 14 de março de 2004
Ultima resposta 16 de nov. de 2006
Respostas 2
Participantes 3