VRaptor - Receber List<List<String>> via ajax

3 respostas
Rafael_Guerreiro

Bom dia pessoal, tudo bem?

Eu estou tentando fazer com que o VRaptor consiga receber uma List<List><String>> usando ajax, ou seja, eu estou tentando enviar um array de arrays de String para o Servidor.

Eu comecei dessa forma:

//Controller
public void remove(Report report, List&lt;List&gt;&lt;String&gt;&gt; data) {
   // report veio preenchido como deveria, mas data vem vazia.
}

// JS
$.ajax({
			url: varUrlToRemove,
			type: 'post',
			dataType: 'json',
			data: {'report':varReportId, 'data':prepareSelecteds(rowSelectedIDs)}, // O método prepareSelecteds retorna um array com arrays de String. Algo assim: [['2:2', '3:1'], ['6:1', '4:6'], ['1:4', '4:7']]
			success: function (data) {
				$($this).attr('disabled', false).button('refresh');
				if (data.code == '202') {
					$('.modalForm').dialog('close');
					$('#search').click();
					$.success(data.message);
				} else {
					$.error(data.message);
				}
			},
			error: function () {
				$($this).attr('disabled', false).button('refresh');
				$.error(errorMessage);
			}
		});

Depois eu pensei em criar uma classe para encapsular o List<String>, mas mantendo o envio do AJAX:

public class RemoveCriteria {
	private final List&lt;String&gt; data;

	private RemoveCriteria(List&lt;String&gt; data) {
		if (!Service.notEmpty(data))
			data = new ArrayList&lt;String&gt;();

		this.data = data;
	}
// Getter
}

// Controller
public void remove(Report report, List&lt;RemoveCriteria&gt; data) {
   // data continua vazio.
}

Por fim, tentei mudar o ajax para fazer um array de objeto e cada objeto tem um array dentro. Mas ainda assim não funcionou.

-EDIT-

Eu acabei de pensar em unir o conteúdo dos arrays internos separando-os por pipe “|” e depois fazer um split no java. É uma boa solução?

3 Respostas

Lucas_Cavalcanti

pra mandar pro vraptor teoricamente um data[0][0]=x,data[0][1]=y, etc deveria funcionar… não rola?

Rafael_Guerreiro

Eu fiz isso…

Não funcionou… Não vem preenchido. Eu resolvi fazendo um join com pipe e no java eu faço um split aonde tem pipe…

Lucas_Cavalcanti

eu criaria uma classe Matriz que tem uma lista de linhas e cada linha tem uma list

assim fica um pouco mais orientado a objetos, e o vraptor funcionaria direito.

Criado 7 de novembro de 2012
Ultima resposta 10 de nov. de 2012
Respostas 3
Participantes 2