Boa tarde, conforme issue https://github.com/caelum/vraptor/issues/479, o problema ao receber lista ordenada no controller foi resolvido e fixado no iogi 0.9.2. Porém depois de atualizar ainda estou tendo problemas com esse caso, por acaso o bug ainda continua? Segue abaixo o exemplo utilizado:
JSP:
var dados = new Array();
$("#table td").each(function(index) {
dados[index] = ($(this).html());
});
ou
var dados = new Array();
$("#table td").each(function(index) {
dados.push($(this).html());
});
Controller:
@Post
public void XPTO(List<String> dados) {
...
}
No exemplo citado, os parâmetros são ordenados na lista do controller pela ordem de recebimento e não pelo índice dos mesmos. Versão VRaptor 3.4.1, iogi 0.9.2 (atualizei apenas o jar).
e como vc tá mandando isso pro controller?
Oi Lucas, desculpe a demora, estou pegando o Array e mandando via Ajax/Jquery dessa forma:
$.ajax({
type: "POST",
url: url,
dataType: "html",
data: {
'dados': dados
},
success: function(data) {
if(data.length > 0) {
...
}
}
});
A lista chega perfeitamente até o controller, porém ordenada pela ordem de recebimento (creio eu) e não pela ordem do índice do Array.
Não lembro o que fiz pra contornar essa situação. Mas este bug continuava acontecendo comigo. Podem verificar no projeto que postei na issue acima.
isso não é um bug… é o esperado…
qdo vc faz:
data: {
'dados': dados
}
eles vão na ordem em que vc colocou na variável dados do javascript… que pelo que vc disse é a ordem de inserção mesmo…
Esses dados vem de um formulário?
faça assim:
...
data: $('form').serialize(),
...
assim vai na ordem dos índices que vc colocou nos nomes dos inputs
Lucas,
No meu caso os dados vem de uma tabela, onde o índice do Array é o número da linha da mesma (código citado na pergunta). Quando eu debugo o javascript via browser, observo que ele envia na requisição os dados ordenados perfeitamente conforme foram inseridos na tabela, porém ao construir a lista no controller ele perde a ordem. Porque isso ocorre?
tenta mudar para:
data: {
'dados[]': dados
}
assim o vraptor vai inserir os índices automaticamente…
se vc faz um console.log(dados) ele mostra os dados na ordem correta?
Lucas,
Fiz a alteração mas ainda não funcionou, lembrando que eu recebo essa variável ‘dados[]’ em um List no controller está correto isso né? Fiz outro teste, dessa vez com um select multiple e dá o mesmo problema. Respondendo sua pergunta, quando faço um console.log(dados), eles vem na ordem correta, parece que o problema está na construção da lista no controller.