VRaptor + JQuery + JSON = Erro

Entao ele mostra o que esta na imagem abaixo, o problema e que eu nao consigo voltar isso ai para o server, e nao consigo pegar o id (4fba6e29701675f9306bd4f3) do objeto


Esse ObjectId tem getters e setters?

se sim, tenta usar o nome dos setters pra popular o objectId no servidor:

var id = // o objectId que veio

var data = {
     "id.inc": id._inc,
     "id.machine": id._machine,
     "id.new": id._new,
     "id.time": id._time
 };

$.post("....url....", data, function() {
   //...
});

e receba um ObjectId id no método do controller.

só que pra isso funcionar precisa ter os setters (setInc, setMachine, etc)

Cara. eu pensei em fazer isso, mas o problema e que eu recebo: 5 objetos sendo q 1 e uma lista. vou ter que fazer 5x4 + Nx4, impossivel heeheheheh por isso tinha pensando em recuperar o JSon via JS e colocar no meu form, pq dai com um form Jsp eu dou um post enviando isso e recebo correto?

Perai, acho que eu entendi, errado, vc esta falando para eu criar o Json no JS?? e nao repassar o objeto que eu recebi do meu java, eu recebo o objeto, crio o json com os Getters e Setters e passo esse novo objeto para o meu metodo… correto?

Fabio, o objeto java NUNCA vai pro javascript. O que vai é alguma representação dele, seja string, seja json, seja o que for.

pra passar para o servidor vc vai precisar usar alguma representação que o servidor saiba transformar em objeto de novo. Por exemplo json, ou form parameters.

eu sei… o que tentei falar e que o vraptor passa um JSON para o meu JS, mas eu nao consigo pegar esse JSON gerado pelo VRAPTOR e via javascript retornar ele para o JAVA, ele nao chega no meu metodo java. vou tentar fazer dessa forma que vc falou… vamos ver o que vai dar

Tentei fazer o seguinte:

$.ajax({
		type: "post",
		data: produto = {  
			     "id.inc": product.cdProduct._inc,  
			     "id.machine": product.cdProduct._machine,  
			     "id.new": product.cdProduct._new,  
			     "id.time": product.cdProduct._time  
			},
		dataType: "json",
    	  url: 'http://localhost:8080/noname/productStore/addProductStores',
    	  success: function(data) {
    	    $('.result').html(data);
    	    alert('Load was performed.');
    	  }
    	});

e o metodo

@Post
	@Get
	@Path("productStore/addProductStores")
	public void addProductStores(ObjectId produto) throws Exception{
		abrirConexao();
	
	}

e recebi o seguinte erro:

então… é pq qdo vc usa o post do jquery e passa um objeto javascript (json) ele não passa esse objeto, ele tenta serializar pra form parameters e fica zoadão… se vc quer passar o objeto por json vc precisa mudar o content-type do post pra json, e mandar ele serializar o json mesmo… tem uma opção pra isso se eu não me engano.

vixe… desse jeito não vai rolar mesmo… ele tenta ler os nomes dos parâmetros do ObjectID, e como ele não foi compilado com informação de debug, não dá…

talvez vc tenha que implementar isso com um converter pra ObjectID mesmo…

entao, nao e o dataType: "json" ??

e existe uma forma facil de fazer converter??? tem anotacao e coisas do genero?

valeu

e lucas, eu nao consigo qdo receber o Json pelo JS passar ele para form parameter? pq dai via form parameter eu consigo passar o objeto inteiro para o vraptor nao e?

pra receber um json, não pra enviar :wink:

resumindo… me ferrei ne? ahahahhahahahaahahh

quase isso :wink:

http://api.jquery.com/jQuery.ajax/

brinca aí com as options possíveis…
tipo a contentType e a data mandando como string

o processData tb eh bom

sim sim… entao eu recebo um JSON e jogo ele no meu form… entendeu?? eu tenho la no meu JSP o meu form, com os objetos que eu quero enviar para o BACK, dai eu faco um autocomplete, recebo via JSON do meu Vraptor, o objeto que eu quero, e na minha funcao javascript, eu seto as variaveis do meu form com o retorno

entendeu +/- a jogada?

E assim funciona?

se vc colocar o json como uma string no form, vc vai ter que deserializar na mão no lado do servidor…

daí vc consegue fazer um converter pra ObjectId

bom vou tentar alguma coisa aqui… se bobiar vou criar um String dentro do meu objeto e antes de voltar parao JS eu loop a colecao e coloco o ID nesse campo, para retornar para o java depois

so tira uma ultima duvida, e possivel eu enviar no ajax mais de 1 parametro nao e? tu sabe como

valeu

Lucas, tira uma duvida, vc falou que ja mexeu com MongoDb…

tem mta diferenca de performance, entre eu fazer uma busca pelo @Id ObjectID Id;

tipo:

ObjectID id = new ObjectID("ff23f2ff");
 ds.get(Product.class, id);

ou buscar por um campo String

  ds.find(Product.class).field("nmProduct").equals("shampoo");

pq se nao tiver eu faco a busca pelo nome mesmo (sempre vou ter apenas 1 produto com auqele nome)
???