VRaptor + submit de array de formulario

Olá amigos, Se puderem me ajudar, por gentileza,

Estou tentando isso no VRaptor:

<form>
<input name="testes[0].atributo.endereco" />
<input name="testes[0].atributo.numero" />
<input name="testes[0].atributo.cidade" />
<input name="testes[0].atributo.estado" />
</form>

e no controller:

public void action(Teste[] testes) {
}

Minha intenção era que chegasse no metodo o array com apenas uma posicao (e os campos do objeto preenchidos). Mas o tamanho do array, no controller, é 4. Sendo que o primeiro item tem os campos preenchidos com o que veio na requisição, e os outros, não. Minha impressão é que o array está sendo criado com o numero de ocorrencias em que o parametro aparece na requisição (no caso, 4).

Dando uma olhada aqui no IOGI, me parece que o problema está nessa linha:

https://github.com/rafaeldff/Iogi/blob/master/src/br/com/caelum/iogi/collections/ParametersByIndex.java#L63

Se esse mapa representa os parametros agrupados por chave ([0], [1], etc), então o tamanho total do array a ser criado seria keys.size(), não values.size()

(esse código é invocado aqui: https://github.com/rafaeldff/Iogi/blob/master/src/br/com/caelum/iogi/collections/ArrayInstantiator.java#L54)

Ou o meu jeito de usar o array está incorreto? Já fiz um teste recebendo um List e funcionou, mas nesse caso específico gostaria de usar o array (pra reaproveitar um método que já existe)

Obrigado!

Trabalhe com Listas…

No caso, “(pra reaproveitar um método que já existe)”, troque o método para listas ou faça assim:

   lista.toArray(new Teste[0]);

DICA: Você pode usar o “Arrays.asList(testes)” para transformar de Array para Listas…

[quote=Rafael Guerreiro]Trabalhe com Listas…

No caso, “(pra reaproveitar um método que já existe)”, troque o método para listas ou faça assim:

   lista.toArray(new Teste[0]);

DICA: Você pode usar o “Arrays.asList(testes)” para transformar de Array para Listas…[/quote]

Pois é, é que o tal método já existente é exposto como serviço rest, e eu não tava muito numas de mudar o parametro de entrada dele hehe…eu estou fazendo como voce sugeriu, recebo a lista na outra action, converto pro array e passo pro outro metodo. De qualquer forma, esse negocio de receber o array nao deveria funcionar?

Sim, deveria… Mas considerando o fato de que Array quase sempre é um péssimo negócio, vale mais a pena você modificar a sua action.

Como ela já está sendo usada, você pode fazer algo assim:

@Component
public class CustomArrayInstantiator implements Instantiator&lt;Object&gt; {
// copie aquela classe e troque justamente a parte que está dando problema.
}