Bom dia senhores,
Estou com um problema para o qual já achei várias “soluções” aqui no fórum e em outros lugares, as quais as pessoas envolvidas disseram que tinha funciona, porém nenhuma delas funcionou pra mim. Por isso estou pedindo ajuda.
Preciso enviar uma lista para o VRaptor (3.4.1) via Ajax (jQuery).
Objeto no Javascript:
var dados = [
{anoVeiculo: 2001, percentualFinanciado: 75},
{anoVeiculo: 2002, percentualFinanciado: 75},
{anoVeiculo: 2003, percentualFinanciado: 75}
];
Envio via Ajax:
[code] $.ajax({
data: {
valores: dados
},
url: '<c:url value="/parametrizacoes/credito/salvar" />',
success: function(xml) {
alert('ok');
}
});
[/code]
Código Java:
@Path("/credito/salvar")
public void creditoSalvar( final List<CreditoBean> valores) {
O “valores” chega populado, porém com os valores zerados!
“anoVeiculo” e “percentualFinanciado” estão escritos corretamente conforme o CreditoBean.
Tem um post do Lucas no qual ele sugere uma solução, quer seria basicamente isso que estou fazendo, porém pra mim não funciona.
Posso estar comendo bola, mas não consegui resolver!
Muito obrigado a todos!
Tente enviar os dados nesse formato:
dados = {
valores : [
{anoVeiculo: 2001, percentualFinanciado: 75},
{anoVeiculo: 2002, percentualFinanciado: 75},
{anoVeiculo: 2003, percentualFinanciado: 75}
]
};
OU
dados = {
'valores[0]' : {anoVeiculo: 2001, percentualFinanciado: 75},
'valores[1]' : {anoVeiculo: 2002, percentualFinanciado: 75},
'valores[2]' : {anoVeiculo: 2003, percentualFinanciado: 75}
};
OU ainda:
dados = {
'valores[0].anoVeiculo': 2001,
'valores[0].percentualFinanciado': 75,
'valores[1].anoVeiculo': 2002,
'valores[1].percentualFinanciado': 75,
'valores[2].anoVeiculo': 2003,
'valores[2].percentualFinanciado': 75
};
Boa tarde Rafael!
Da última forma que você sugeriu funcionou:
dados = {
'valores[0].anoVeiculo': 2001,
'valores[0].percentualFinanciado': 75,
'valores[1].anoVeiculo': 2002,
'valores[1].percentualFinanciado': 75,
'valores[2].anoVeiculo': 2003,
'valores[2].percentualFinanciado': 75
};
O problema é montar dinamicamente um objeto assim né? Porque meu ‘objeto verdadeiro’ tem aquela estrutura. Na verdade nem sei como montar um objeto desses dinamicamente.
Tem alguma sugestão?
Muito obrigado!
O jQuery pode te ajudar com isso:
var dados = [
{anoVeiculo: 2001, percentualFinanciado: 75},
{anoVeiculo: 2002, percentualFinanciado: 75},
{anoVeiculo: 2003, percentualFinanciado: 75}
];
var valores = {};
for (var i = 0; i < dados.lenght; i ++) {
$.each(dados, function(key, val) {
valores['valores[' + i + '].' + key] = val;
});
}
console.log(valores); // Exibir no chrome
Tinha mais uma informação que eu precisava por, enquanto você respondia eu consegui da seguinte forma:
[code] function serializarDados() {
var serializado = '{';
serializado += '"anoConcessao": ' + $('#anoConcessao').val() + ',';
for(var d in dados) {
serializado += '"valores[' + d + '].anoVeiculo": "' + dados[d].anoVeiculo + '",';
serializado += '"valores[' + d + '].percentualFinanciado": "' + dados[d].percentualFinanciado + '",';
}
serializado = serializado.substring(0, serializado.length - 1) + '}';
return $.parseJSON(serializado);
}[/code]
Também usa o jQuery, e assim como a sua solução também funcionou.
Vou seguir essa linha de raciocínio então, mas cai entre nós é bem “gambis” né? rs
Será que não existe nenhuma forma mais elegante?
Sim, é bem gambiarra mesmo…
Mas eu achei o seu código mais tendencioso à erros e ao retrabalho…
Além de trabalhar com Strings e depois fazer o parse em JSON…
Sobre a vírgula que está sobrando, qual tal algo assim ao invés de um substring:
// ...
serializado += '"anoConcessao": ' + $('#anoConcessao').val();
for(var d in dados) {
serializado += ', "valores[' + d + '].anoVeiculo": "' + dados[d].anoVeiculo + '"';
serializado += ', "valores[' + d + '].percentualFinanciado": "' + dados[d].percentualFinanciado + '"';
}
serializado += '}';
// ...
Concordo com você. Porem, daquela forma como você sugeriu, eu não conseguiria adicionar o anoConcessao, conseguiria?
Gostei da sugestão da vírgula, vou aplicar!
Conseguiria, algo assim:
var dados = [
{anoVeiculo: 2001, percentualFinanciado: 75},
{anoVeiculo: 2002, percentualFinanciado: 75},
{anoVeiculo: 2003, percentualFinanciado: 75}
];
var valores = {};
for (var i = 0; i < dados.lenght; i ++) {
$.each(dados, function(key, val) {
valores['valores[' + i + '].' + key] = val;
});
}
// Adiciona mais coisas
valores['anoConsessao'] = $('#anoConcessao').val();
console.log(valores); // Exibir no chrome
Hum você tem razão, comi bola.
Muito obrigado cara, me ajudou muito!