Atualmente eu tenho um método Java que retorna uma java.util.ArrayList<BeanObject>, e o método agora vai ficar disponível por ajax através do DWR. O cara que falo para usar o dwr disse que a grande vantagem dele é que você tem um objeto java no javascript no final. Por isso gostaria de saber, o javascritp vai interpretar o retono como um objeto ou um array?
Alguem sabe alguma forma de contronar caso ele interprete como um array (ou hash).
Sim, ele faz a conversão ida e volta automaticamente.
ex:
no javascript:
var objetoUsuario = new Object();
objetoUsuario.nome = “Alexandre”;
Se o java retornar um objeto do tipo usuario, vc vai poder acessa-lo da mesma maneira que faria no java.
paulopatto
Então esse exemplo genérico seria Válido (efetuando os devidos imports de scripts no javascript):
// Método javapublicArrayList<MeusBeans>buscar(Stringnome,Stringcategoria){returnDAO.buscar(Stringnome,Stringcategoria);}//MeusBeans.javapublicclassMeusBeans{intid;Stringimagem;Stringnome;Stringcategoria;publicMeusBeans(){}// Aqui Getters e Setters}// funcoes.jsfunctionbuscar(n, c){Banco.buscar(n,c,tratador);}functiontratador(data){for(i=0;i<=data.size(),i++){obj=data.get(i)window.alert(obj.getNome());}}
Por que não tem nada sobre isso na documentação do dwr??? Um detalhe importante é o uso de Generics, mas se eu retornando um ArrayList sem gnerics e ele entendendo que lá dentro existem objetos MeusBeans blz.
aleck
Na documentação eles referenciam isto como signatures.
Realmente a documentação do dwr é muito fraca, provavelmente pq eles ganham com o suporte. Mas a comunidade está ae pra isso.
rodrigoK
Como seu objeto MeusBeans tem o atributo nome, você no javascript não vai usar getNome() ou data.get(i) como no Java, mas sim como um array do próprio javascript e acessar o atributo do objeto direto pelos nomes dos atributos.
Ou seja, falando no popular, o DWR não consegue trabalhar com coleções e generics.
Somente Hashs, arrays.
E no final eu não tenho um objeto java no javascript, ou tenho uma represetação de objeto java num hash javascript.
aleck
paulopatto:
Ou seja, falando no popular, o DWR não consegue trabalhar com coleções e generics.
Somente Hashs, arrays.
E no final eu não tenho um objeto java no javascript, ou tenho uma represetação de objeto java num hash javascript.
Claro que consegue, não entendi muito bem sua dúvida mas os objetos trafegam livremente entre as duas camadas graças ao DWR.
Vc pode usar suas coleções normalmente, a única coisa que muda é a maneira de acessar um objeto, referenciando o seu atributo e nao utilizando get e set, mas isso não tem nada a ver com o DWR, é a maneira que o javascript tem para utilizar um objeto.
paulopatto
Ok Aleck, mas é que eu fiquei com uma falsa ilusão e fiz esse comentário meio que menino chorão decepcionado.
Vlw a ajuda.
paulopatto
Enfim segue ai a minha solução né...
InvHeaderJDBC.java
packagecom.paulopatto.dwr;importcom.mysql.jdbc.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Collection;importjava.util.HashMap;importjava.util.Map;publicclassInvHeaderJDBCextends_DWR{// _DWR extende DwrServletprivatestaticConnectionconexao;static{try{Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){e.printStackTrace();}try{conexao=(Connection)DriverManager.getConnection("jdbc:mysql://localhost/lab","dev","o_cravo_brigou_com_a_rosa...");}catch(SQLExceptione){e.printStackTrace();}System.out.println("Iniciado com sucesso?");}/// GUJ::" Rafael Steil "/// @see http://www.guj.com.br/posts/list/21957.javapublicCollectionget(){Mapreply=newHashMap();Stringsql="Select * from invheader";try{java.sql.PreparedStatementstmt=conexao.prepareStatement(sql);ResultSetrecord=stmt.executeQuery();while(record.next()){Mapreply2=newHashMap();reply2.put("id",record.getInt("id"));reply2.put("data",record.getString("invdate"));reply2.put("cliente",record.getInt("client_id"));reply2.put("preco",record.getDouble("amount"));reply2.put("taxa",record.getDouble("tax"));reply2.put("total",record.getDouble("total"));reply2.put("notas",record.getString("note"));reply.put(record.getInt("id"),reply2);}}catch(SQLExceptione){e.printStackTrace();}returnreply.values();}}
InvHeader.html
<!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title></title><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/><scripttype="text/javascript"src="../ajax/engine.js"></script><scripttype="text/javascript"src="../ajax/util.js"></script><scripttype="text/javascript"src="../ajax/interface/InvHeader.js"></script><script>functionClassInvHeader(hash){varid=hash["id"];vardata=hash["data"];varcliente=hash["cliente"];varpreco=hash["preco"];vartaxa=hash["taxa"];vartotal=hash["total"];varnotas=hash["notas"];this.getId=getId;this.getData=getData;this.getCliente=getCliente;this.getPreco=getPreco;this.getTaxa=getTaxa;this.getTotal=getTotal;this.getNotas=getNotas;functiongetId(){returnid;}functiongetData(){returndata;}functiongetCliente(){returncliente;}functiongetPreco(){returnpreco;}functiongetTaxa(){returntaxa;}functiongetTotal(){returntotal;}functiongetNotas(){returnnotas;}}</script></head><body><script>functionmostrar(){InvHeader.get(listar);}functionlistar(reply){for(varreply2inreply){desmontaHash(reply[reply2]);}}functiondesmontaHash(hash){for(vardadoinhash){document.write("-"+hash[dado]);}varobj=newClassInvHeader(hash);varalerta="id=>"+hash["id"]+";nota=>"+hash["notas"]+";";varalertaOBJ="id=>"+obj.getId()+";nota=>"+obj.getNotas()+";";window.alert(alerta);window.alert("COMOBJETO:"+alertaOBJ);document.write("<br/>"+alertaOBJ+"<<br/>"); document.write("<br/>")}mostrar();</script></body></html>
Essa foi uma implementação de teste mas o core dela será usado na aplicação, obrigado a todos, pela ajuda.