Bom dia,
Eu estou tendo problemas ao passar multiplos parametros do servidor de firerentes classes java para um metódo JavaScript utilizando o Dwr. No caso gostaria de receber 2 parametros de callback em 1 metodo javascript , o que não está sendo possivel. Gostaria de fazer algo como :
class2.metod(parametro,class.metod(parametro,"javaScriptMetod"));
function javaScriptMetod(aux,aux2){
... faz alguma coisa com aux
... faz alguma coisa com aux2
}
ou se possivel fazer o callback retornar um valor para uma variavel , e não para o parametro de um metodo.
Se alguem pode me ajudar ???
Agradeço desde já.
Cara, quando eu preciso disso eu costumo fazer o método java retornar um Map.
Aqui um exemplo só pra ter uma ideia:
// código java
public Map<String, String> metodo() {
Map<String, String> map = new HashMap<String, String>();
map.put("var1", "valor1");
...
}
// código javascript
Classe.metodo(function(map) {
var valor1 = map['var1'];
});
Pode ser que você já saiba, mas dá pra retornar um java bean (ex: Pessoa, Conta, etc) pro javascript também. É só declarar um converter do DWR e utilizar o objeto de retorno no javascript acessando os atributos dele. Mas dependendo do caso, talvez tenha que usar um Map ou algo do tipo mesmo.
Pois é , a primeira coisa que eu pensei foi a utilização do java bean, mas por algum motivo eu não estou conseguindo, posso esta fazendo alguma coisa errada, vou tentar aqui de novo pois com certeza essa é a melhor opção pra minha aplicação, muito obrigado , já me ajudou muitoo !!!
Beleza, já deu uma olhada nesse link? Ele mostra como usar essa conversão dos beans e objetos java.
Se você tiver usando a versão 3 é tranquilo, basta usar @DataTransferObject na classe que vai ser convertida. Mais detalhes aqui.
Nooo , ocm certeza, bom d+++ agora vou conseguir fazer a passagem com varias variaveis, obrigado mesmo !!!
Ok , eu acho que consegui fazer o @DataTransferObject funcionar, mas não consigo acessar os atributos remotamente de jeito nenhum !!! poderiam me ajudar me dando um exemplo de como acessar um atributo da classe e recebendo em uma variavel java script ???
mais ou menos :
@DataTransferObject
public class teste {
@RemoteProperty
private String casa;
public teste(){
this.casa="frase de teste";
}
@RemoteProperty
public String getCasa() {
return casa;
}
}
e o código JavaScript algo como :
var aux = teste.getCasa();
alert(aux);
e assim recebendo “frase de teste” no alerta. ???
Cara, acho que você confundiu um pouco o @RemoteProperty com o @RemoteMethod.
Repara que naquele link o @RemoteProperty tá na seção de Object Conversion, ou seja, ele serve pra você indicar que aquela propriedade será convertida do Java Bean para o Objeto em Javascript.
Por exemplo:
Se você tem esse Java Bean:
@DataTransferObject
public class Teste {
@RemoteProperty
private String casa;
public Teste(){
this.casa="frase de teste";
}
@RemoteProperty
public String getCasa() {
return casa;
}
}
E essa outra classe:
@RemoteProxy
public class Classe {
@RemoteMethod
public Teste metodo() {
return new Teste();
}
}
Terá esse código JS:
[code]// código javascript
Classe.metodo(function(teste) {
var aux = teste.casa;
alert(aux);
}); [/code]
Teoricamente é pra exibir “frase de teste” 
Então, eu já sabia fazer do jeito que você falou, mas eu precisava de guardar esse valor de retorno da classe em uma variável que esteja fora da chamada do metodo “Classe.metodo” que você criou , estou precisando desse valor para uma variavel global !! seria possivel ??? Ex :
// código javascript
Classe.metodo(aux);
var aux = function(teste){
return = teste.casa;
}
alert(aux);
ou algo do tipo que me permita utilizar o valor retornado como variavel global, estou precisando disso para conseguir guardar 2 matrizes em 2 variaveis e utiliza-las como parametros para outro metodo em javascript. Vlwwwww
Hmm, acho que entendi. Sim, é possível você armazenar em uma variável global.
Mas você tem que ver que a variável aux só terá o valor que veio do Java depois que o callback for executado.
Então, supondo que você tenha a variável global aux, esse código não irá exibir o valor correto:
Classe.metodo(function(teste){
aux = teste.casa;
});
alert(aux);
Porque o alert será executado antes do retorno (callback) da execução do metodo.
Então , isso mesmo, tenho certeza que desse jeito que eu te mostrei não vai funcionar já testei de varias maneiras, pensei que a solução seria a conversão da classe Java pra JavaScript como você havia me sugerido , assim acessando os atributos diretamente, mas não consegui de jeito nenhum. se é possível salvar em uma variável global , como isso pode ser feito ???
Na verdade, esse código do último post armazena corretamente na variável global. O problema é só que o alert é executado antes.
Então é só chamar o seu método de dentro do callback.
Em exatamente que momento você precisa dessa variável?
Eu preciso fazer o seguinte, fazer 2 classes em java fazer a leitura de alguns arquivos, efetuar alguns cálculos e cada uma delas vai me retornar uma matriz de dados, assim eu preciso fazer com que essas duas matrizes de retorno sejam utilizadas como parâmetros de entrada em uma função JavaScript . Eu até li a respeito de múltiplas variáveis como parâmetros, mas até agora nenhuma forma de se passar mais de 1 parâmetro do servidor, apenas vários do browser e 1 do servidor, então pensei que a solução seria armazenar essas matrizes de retorno inicialmente em variáveis globais, mas não estou conseguindo.!! Entendeu ??
Vlwwww
Hmm… Você já tentou fazer o método Java retornar um Map? Mais ou menos como eu disse no começo desse post.
Porque daí você coloca as duas matrizes no map.
Ou então, é só chamar o primeiro método e no callback dele você chama o segundo. Por exemplo:
Classe.metodoUm(function(matriz1) {
// pronto, aqui você já tem a primeira matriz
Classe.metodoDois(function(matriz2) {
// aqui você já tem as duas matrizes e pode chamar a função que precisa delas
});
});
Eu já tentei colocar uma função dentro do callback da outra, o problema é que quando você coloca a função JavaScript dentro do segundo callback não tem como você especificar qual vão ser os nomes dos parametros dos retornos ( callbacks ) o que impossibilita a utilização das duas matrizes ao mesmo tempo dentro da Função Java Script !!!
foda veiii auhhuahuauh