DWR+CallBack = Erro

4 respostas
B

Olá,

Estou tentando implementar o exemplo do DWR, é o seguinte:

dwr.xml

...
<dwr>
	<allow>
		<create creator="new" javascript="FacadeAjax" scope="request">
			<param name="class" value="com.teste.facadeajax.FacadeAjax"/>
		</create>
		<convert converter="bean" match="com.teste.bean.Pessoa"/>
	</allow>
</dwr>

JavaScript

function setBean(){ 
	var bean = {
		id:1,
		nome:"Brunno FFFF",
		endereco:"Mr Hull",
		cidade:"Sao paulo",
		telefone:"3333333"
	}
	FacadeAjax.getBean(renderBean,bean);
}

function renderBean(bean){

	alert(bean.nome);

//	DWRUtil.setValue("renderSetBean", "Id:" + bean.id + "<br>" + "Name: " + bean.nome + "<br>" +
//	"Telephone: " + bean.telefone + "<br>" + "Address: " + bean.endereco + "<br>");
}

FacadeAjax.java

package com.teste.facadeajax;

import com.teste.bean.Pessoa;

public class FacadeAjax {
	
	public Pessoa getBean(Pessoa p){

        System.out.println("Bean");

        System.out.println(p.getId());

        System.out.println(p.getNome());

        System.out.println(p.getEndereco());
        
        System.out.println(p.getCidade());
        
        System.out.println(p.getTelefone());
        
        
        return p;
	}  
}

Pessoa.java

package com.teste.bean;


public class Pessoa {

	private int id;
	
	private String nome;
	
	private String endereco;
	
	private String cidade;
	
	private String telefone;

        // gets e sets
}

O problema é que quando executo o seguinte erro aparece…

21:36:40,890 WARN [BaseCallMarshaller] Marshalling exception: Missing method or missing parameter converters: FacadeAjax.getBean
21:36:40,921 WARN [BaseCallMarshaller] --Erroring: batchId[0] message[java.lang.IllegalArgumentException: Missing method or missing parameter converters: FacadeAjax.getBean]

Quando tiro o a função de callback (renderBean) de dentro do FacadeAjax.getBean(bean), funciona normalmente, apesar de não imprimir nada na tela.

Oq pode ser, já tentei de tudo e nada resolve…

Grato,

Brunno Tavares

4 Respostas

H

Olá, cara você esta usando o DWR2.0.1 ou o DWR2.0M2?

Se for um dos dois a forma como é feito a chamada mudou. Tente dessa maneira.

FacadeAjax.getBean(bean, renderBean);

Primeiro o parâmetro depois a chamada de callback.

Uma dica, use a segunda forma, pois você além de deixar o código mais legível voce ainda pode tratar os erros. Veja o exemplo:

FacadeAjax.insertPermissoesUsuario(bean,{
	callback:function(list){
	       //Seu método aqui, funções ou outra chamada DWR
	},
	errorHandler:function(errorString, exception)  {alert(errorString)},
	timeout:50000
});

Para ver funções aninhadas acesse minha página a baixe o projeto do Sun Tech Days 2007 que dei uma palestra e coloquei o projeto que usei para a galera olhar. Uso muito chamadas aninhadas.

Abraços e boa sorte.

H

Completando, no DWR 1.xxx
você poderia fazer dessa forma…

FacadeAjax.getBean(renderBean, bean);

ou

FacadeAjax.getBean(bean, renderBean);

Já nas versões a partir da 2.0M2 vc deve seguir as formas que te passei…uma das duas…

FacadeAjax.getBean(bean, renderBean);

ou

FacadeAjax.insertPermissoesUsuario(bean,{
   callback:function(list){
          //Seu método aqui, funções ou outra chamada DWR
   },
   errorHandler:function(errorString, exception)  {alert(errorString)},
   timeout:50000
});

Abraços

B

Vlw handersonbf, funcionou direitinho…

Apesar de não gostar muito desse jeito de deixar aninhado, acho que é uma boa técnica…vlw

H

No começo eu tbm nao gostava, mais vendo a arquitetura ele é bem interessante e organizado.

algumas das vantagens ao me ver…

1.Vc pode ter várias chamadas agrupadas(aninhadas) e definir para cada uma se a chamada vai ser assincrona ou sincrona, com uma simples passagem de parâmetro;

2.Ter controle do retorno do metodo;

3. Tratar algum erro(exception do java) caso aconteca algum;

4. Ter controle do tempo da sua chamada(timeout) que caso estoure o tempo vc tem como enviar uma mensagem de erro ao usuário específica para ele.

5. Ao meu ver vc tem o código mais organizado, pois se vc ficar criando chamadas e metodos de retorno vc vai ter algo como um go to da vida(minha opniao) entao prefiro que a chamada e o retorno sejam tratados na mesma função.

Bem essas são as principais vantagens que vejo, claro fica a sua escolha :smiley:

Abraços

Criado 15 de maio de 2007
Ultima resposta 21 de mai. de 2007
Respostas 4
Participantes 2