Buscar valor de uma propriedade passando o nome do atributo
19/11/2013 09:47
1
Bom Dia !

Estou criando uma relatório em excel com o apache poi e parei no seguinte problema. Tenho uma lista de objetos e um map de headers que eu quero que apareçam no relatório. A idéia é só buscar os atributos que estão no headers. Quando é um atributo da própria classe funciona que é uma maravilha:

def participantes = Participantes.list()
def headers = ['nome' : "Nome", 'cpf' : "Cpf"]
...

headers.eachWithIndex { obj, i ->
def propertyValue = item?."${obj.key}"
}

Agora surgiu um problema na hora de buscar um atributo de uma relação. Não estou conseguindo pegar o valor na situação abaixo:

def headers = ['nome' : 'Nome', 'cpf' : 'Cpf', 'endereco.estado': 'Estado' ]
..

Tentei de várias formas e não consegui concatenar de forma dinamica. Alguma idéia ?



Tags: groovy objeto generico relatorio report


1
Oi Antonio,

neste caso você pode pensar no uso de criterias. Você pode montar a sua criteria dinâmicamente com base nos parametros que você recebe.

Outra opção interessante é você fazer uma busca por exemplo.
No caso você preencheria o seu objeto com os parametros recebidos pelo controlador e os usuaria para fazer a consulta.

Da uma olhada neste link: http://grails.org/doc/2.3.x/ref/Domain%20Classes/find.html


1
Não sei se entendi direito mas acho que é


def participantes = Participantes.list()
def headers = ['nome' : "Nome", 'cpf' : "Cpf"]
...

participantes.each{p ->
headers.each { h->
println p.properties[h]
}
}


0
Dae Kico .. vlw pela dica. No exemplo eu passei um list msm mais nos meus grids eu faço uso de criterias. A idéia é criar um helper para permitir exportar uma lista de objetos.

Leandro vlw pela dica tb, eu ainda não tinha tentado dessa forma mais alinda não consigo buscar um atributo em um objeto relacionado.

ex: def headers = ['nome' : 'Nome', 'cpf' : 'Cpf', 'endereco.estado': 'Estado' , 'cargo.nome': 'Cargo']

participantes.each{p ->
println p.properties['cargo.nome']
}

nesse caso retorna null.
19/11/2013 16:01


1
Opa, agora entendi.

Mas acho melhor voce criar um marshaller.

neste link, eu mudei a forma padrão para renderizar JSON

Voce pode criar um metodo estatico na tua classe de dominio pra dizer quais são os headers.

Algo assim:

class Participantes {

static headers = {[
'nome': 'Nome',
'cpf' : 'Cpf',
'endereco.estado': 'Estado'
]}
}


depois no teu marshaller voce pega os header e exporta como você achar melhor.

Espero que ajude


0
Vlw Leandro
19/11/2013 23:33



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto