Grails DataBinding
Postado em
30/04/2009 00:00

0

0
Pessoal, ultimamente estive com problemas com o Grails em relação a binding de listas, quando esta lista é um objeto complexo.
Imaginem propriedades no seu form do tipo:
listaLinks[0].id=lala
listaLinks[0].nome=lala
listaLinks[5].id=lala
listaLinks[5].nome=lala
O problema:Quando o grails faz o binding de collections(Lists), o tipo padrão a ser instanciado é ArrayList, porém neste tipo em particular você não pode por por ex: add(posicao100), pois ele cria um bag de 10 em 10 (Padrão). Devido a isso, quando você tem posições que pulam posições vocês irão encontrar excessões no grails como: IndexOfBounds exception, que na verdade é gerado pelo Spring.
Depois de debugar um bocado e pesquisar, vou deixar aqui a dica:
Anteriormente temos uma classe Por ex, um command assim:
class LinksCommand {
List<SUACLASSEENTITY> listaLink
}
Para que o grails se comporte da maneira desejada, basta por:
class LinksCommand {
List<SUACLASSEENTITY> listaLink = org.apache.commons.collections.list.LazyList.decorate(
new ArrayList(),
org.apache.commons.collections.FactoryUtils.instantiateFactory(SUACLASSEENTITY.class)
);
}
Resumo da ópera: É uma maneira elegante de não fazer gambiarras do tipo: lista1.nome e etc..
ps: Não esqueçam de incluir a biblioteca commons-collections no seu classpath
Até!
Tags:
Tópicos avançados
pedro.goncalves
Pontos: 0