Lucas Teixeira

@lucastex

Arquivo para a tag ‘builder’

Renderizando um XML como resposta em grails

com 7 comentários

Se em grails você precisar renderizar um XML como resposta de uma action, use o método render junto com o builder de XML que temos disponível. Muito fácil, rápido e objetivo.

No exemplo abaixo, um parâmetro nome é passado para a action, que faz uma consulta baseado neste parâmetro e nos nomes dos clientes.

def busca = {
   def clientes = Cliente.findAllByNomeIlike("%${params.nome}%")

   render(contentType: "text/xml") {
      results() {
         clientes.each {
            cliente -> result() {
               id(cliente.id)
               nome(cliente.nome)
            }
         }
      }
   }
}

Explicando o auto-explicativo:

Linha 2: Usamos um método dinâmico do grails (não, este método não existe na classe) que permite que eu localize todos os clientes (findAll) por seus nomes (byNome) Ilike (case insensitive) usando o parâmetro nome que veio no request. Esta lista é armazenada na referência clientes.

Linha 4: Pela funcão render deixamos claro que iremos renderizar um conteúdo text/xml

Linha 5: Esta será a nossa tag root do xml: results. A closure que se abre definirá os filhos deste nó.

Linha 6: Cada cliente na lista retornada…

Linha 7: Será um novo nó result do XML de resposta

Linhas 8 e 9: Os fois filhos de result, teremos o id do cliente e seu nome, suficiente para uma combo com auto-complete!
O resultado foi como esperado, e o tempo de fazer o exemplo funcionar foi definitivamente menor que o de escrever este post!

<results>
   <result>
      <id>313</id>
      <nome>JOSE DA SILVA</nome>
   </result>
   <result>
      <id>817</id>
      <nome>PATRICIA MARIA SILVA E SILVA</nome>
   </result>
   <result>
      <id>91</id>
      <nome>MARCOS SILVINO</nome>
   </result>
</results>

Written by Lucas Teixeira

November 3rd, 2009 at 10:45 am

Postado em Grails

Com as tags , , , ,

Get Adobe Flash playerPlugin by wpburn.com wordpress themes