Vraptor com campos array no formulário [RESOLVIDO]

2 respostas
alarangeiras

Estou fazendo um projeto com VRaptor e me deparei com o seguinte problema. Nosso form, tem algumas variáveis do tipo array( String[]. Long[], etc ). Essas variáveis são usadas para manter carregados os valores em nossa combobox. Ou seja, postamos os valores e quando a tela volta a ser renderizada, comparamos os valores dentro do array com os valores da lista que preenche a combo.

Conseguimos fazer essa parte de boa, mas o problema é que aqui na empresa utilizamos o Sonar e ele acusa como um problema se utilizarmos a própria referência do objeto no form. Explicando melhor, na hora de darmos os gets e sets nas variáveis do tipo array no form, o Sonar nos mostra que temos que clonar os arrays para não haver risco de mudança nos valores do array original. O código fica assim:

private Long[] 		brandsSelected;

public Long[] getBrandsSelected() {
		if ( brandsSelected != null ) {
			return ( Long[] ) brandsSelected.clone();
		}
		else {
			return null;
		}
	}

	public void setBrandsSelected(Long[] brands) {
		if ( brands != null ) {
			this.brandsSelected = (Long[]) brands.clone();
		}
		else {
			this.brandsSelected = null;
		}
	}

Quando fazemos isso, o VRaptor parece perder o bind entre o que está vindo da tela e o objeto form. Ao invés de setar todos os valores do array, ele passa a considerar apenas o último. Ou seja, se na tela marcarmos as checkbos de valor 1,3,5,9 o que geraria um array Long[ 1,3,5,9 ] ele considera apenas o último valor Long[9].

Alguém tem alguma idéia de por que isso possa estar acontecendo?

2 Respostas

Lucas_Cavalcanti

vraptor 2 ou 3?

alarangeiras

VRaptor 3 mas já resolvi… eu usei uma solução que você mesmo propôs em outra thread que eu não havia achado antes.
Substitui todos os arrays de strings por coleções (mas especificamente Lists).
Resolveu na hora.

Obrigado pela resposta.

Criado 28 de janeiro de 2011
Ultima resposta 28 de jan. de 2011
Respostas 2
Participantes 2