Mandar um Array do cliente para o servidor via ajax e Vraptor [RESOLVIDO]

7 respostas
V

Boa tarde estou tentando mandar uma lista de um objeto via ajax, mas sem sucesso, ele monta certinho no cliente e exibe, porem quanto vai para o servidor os atributos dos objeto esta vazio, ele certo o tamanho da lista só fica vazio o atributos alguém sabe o que estou fazendo de errado,

segue código:

Java script:

function gerarEtiquita() {

	var items = jQuery("#rowed3").jqGrid('getGridParam', 'selarrrow');
	var numOfRowsBusca = items.length;

	var etqcodbarradados = new Array();
	for ( var i = 0; i < numOfRowsBusca; i++) {
		var etiquetas = jQuery("#rowed3").jqGrid().getRowData(items[i]);
		
		etiquetas.qtdetiqueta = $('#'+etiquetas.iditem+'_qtdetiqueta').val();
		
		etqcodbarradados.push({
				'etqcodbarradados.iditem' : etiquetas.iditem,
				'etqcodbarradados.codbarra' : etiquetas.codbarra,
				'etqcodbarradados.abreviatura' : etiquetas.abreviatura,
				'etqcodbarradados.quantidade' : etiquetas.qtdetiqueta,
		});
		
	console.log(etqcodbarradados);

	    $.ajax({
	       type: "POST",
	       url: $('#nameProject').val() + "/etqcodbarra/report",
	       data: {
	    	   etqcod: etqcodbarradados
			},
	       dataType: "json",
	       success: function(msg){alert(msg)}
	    });
		
		
	}

no console.log ele mostra assim:

[
Object
etqcodbarradados.abreviatura: "YANGZI FACA LEGUMES 3.5 - YA52 - 11857"
etqcodbarradados.codbarra: "7898516912091"
etqcodbarradados.iditem: "19083"
etqcodbarradados.quantidade: ""
__proto__: Object
, 
Object
etqcodbarradados.abreviatura: "YANGZI ESPATULA NYLON 11633"
etqcodbarradados.codbarra: "7898516899514"
etqcodbarradados.iditem: "19082"
etqcodbarradados.quantidade: ""
__proto__: Object

o meu controller:

@Post
	@Restrito
	@Path("/etqcodbarra/report")
	public void etqcodBarra(List<Etqcodbarradados> etqcod) {

Alguém sabe como devo fazer para mandar uma Lista de um objeto do cliente para o servidor via ajax?

Orbrigado!

7 Respostas

G

Fala vasilvei…

Já tentou assim:

@Post  
@Restrito  
@Path("/etqcodbarra/report")  
public void etqcodBarra(Etqcodbarradados[] etqcod) {  
     ....
}

e ai no jsp vc teria os inputs dessa forma…

&lt;form id="meuForm"&gt;
   &lt;input type="text" name="etqcodbarradados[0].iditem" /&gt;
   &lt;input type="text" name="etqcodbarradados[1].iditem" /&gt;
   &lt;input type="text" name="etqcodbarradados[2].iditem" /&gt;
&lt;/form&gt;

E no seu ajax poderia ser feito dessa forma:

$.ajax({  
           type: "POST",  
           url: $('#nameProject').val() + "/etqcodbarra/report",  
           data: $('#meuForm').serialize(),  
           dataType: "json",  
           success: function(msg){alert(msg)}  
        });

Acho que daria certo p/ seu caso…

Att,

V

Obrigado pela resposta, pois é dessa forma eu fiz da certo, só que daí eu teria que criar um form, e uma table, eu imaginei que teria como mandar um array da forma que estava fazendo, poque se fizer por exemplo um array de String e dá certo.

L

o nome dos parametros que o vraptor espera é:

etqcod[0].abreviatura
etqcod[0].codbarra
etqcod[0].iditem
etqcod[0].quantidade


etqcod[1].abreviatura
etqcod[1].codbarra
etqcod[1].iditem
etqcod[1].quantidade
...

se vc conseguir modificar essa array pra fazer isso, daí o vraptor vai saber brincar.

G

Boa Lucas… fui na onda do nome do objeto e tava colocando o exemplo errado…

De fato onde eu disse:

&lt;form id="meuForm"&gt;  
       &lt;input type="text" name="etqcodbarradados[0].iditem" /&gt;  
       &lt;input type="text" name="etqcodbarradados[1].iditem" /&gt;  
       &lt;input type="text" name="etqcodbarradados[2].iditem" /&gt;  
    &lt;/form&gt;

Eu gostaria de ter dito:

&lt;form id="meuForm"&gt;  
       &lt;input type="text" name="etqcod[0].iditem" /&gt;  
       &lt;input type="text" name="etqcod[1].iditem" /&gt;  
       &lt;input type="text" name="etqcod[2].iditem" /&gt;  
    &lt;/form&gt;

:smiley:

V

Valeu aí galera consegui resolver fiz dessa forma:

JavaScript

function gerarEtiqueta() {

	var items = jQuery("#rowed3").jqGrid('getGridParam', 'selarrrow');
	var numOfRowsBusca = items.length;
	var etiq = "";
	var etiquetas=[];
	for ( var i = 0; i < numOfRowsBusca; i++) {
		etiquetas[i] = jQuery("#rowed3").jqGrid().getRowData(items[i]);
		
		etiquetas[i].qtdetiqueta = $('#'+etiquetas[i].iditem+'_qtdetiqueta').val();
		
		if(i==0){
			etiq  += "etqcodbarradados.["+i+"].iditem : "+ etiquetas[i].iditem + ", "
			  + "etqcodbarradados.["+i+"].codbarra : "+ etiquetas[i].codbarra + ", " 
			  + "etqcodbarradados.["+i+"].abreviatura : "+ etiquetas[i].abreviatura +", "
			  + "etqcodbarradados.["+i+"].quantidade : "+ etiquetas[i].qtdetiqueta ;
		}else{
			etiq  += ", etqcodbarradados.["+i+"].iditem : "+ etiquetas[i].iditem + ", "
			  + "etqcodbarradados.["+i+"].codbarra : "+ etiquetas[i].codbarra + ", " 
			  + "etqcodbarradados.["+i+"].abreviatura : "+ etiquetas[i].abreviatura +", "
			  + "etqcodbarradados.["+i+"].quantidade : "+ etiquetas[i].qtdetiqueta ;
		}
			
		
		
	}
		
	
		
		
	var properties = etiq.split(', ');
	var etqcodbarradados = {};
	properties.forEach(function(property) {
	    var tup = property.split(':');
	    etqcodbarradados[tup[0]] = tup[1];
	});	
		
		$.post($('#nameProject').val() + "/etqcodbarra/report", etqcodbarradados );
	}

Controller:

@Post
	@Restrito
	@Path("/etqcodbarra/report")
	public void etqcodBarra(List<Etqcodbarradados> etqcodbarradados) {
L

já que vc já tá fazendo esse for, pq vc já não gera a query string?

só trocar o : por = e a , por &

daí não precisa fazer aquele if (i==0), e colocar sempre um & no final, ele ignora se tiver um & sobrando.

V

Valeu aí Lucas pela dica, deu certo.

e obrigado guivirtuoso pela resposta!

Criado 18 de julho de 2012
Ultima resposta 19 de jul. de 2012
Respostas 7
Participantes 3