2009-12-21 15 views
6

Me preguntaba si alguien tenía una idea de la mejor manera de proporcionar la funcionalidad de bindData() fuera de mis controladores Grails. En mi proyecto actual he creado varias clases groovy para modelar objetos devueltos por una API. En estas clases tengo un método estático que analiza xml y devuelve una lista de objetos de la clase. Me gustaría omitir todas las tonterías de conversión utilizando el método bindData en estas clases. Cualquier sugerencia sobre cómo hacerlo sería apreciada.Usando el método bindData fuera del controlador

Respuesta

8

Estaba buscando una solución similar, para usar bindData en una clase de servicio. Encontré una solución en JT's blog. La solución es, básicamente, a la importación:

import org.codehaus.groovy.grails.web.metaclass.BindDynamicMethod 

continuación, agregue esto a su código:

def foo = new Foo() 
BindDynamicMethod bind = new BindDynamicMethod() 
def args = [ foo, params, [exclude:['name', 'mail']] ] // for example 
bind.invoke(foo, 'bind', (Object[])args) 

el ([] Objeto) reparto es necesaria para la compatibilidad du Groovy/Java. (Groovy trata el objeto 'args' como ArrayList, no como una matriz de Objetos.)

+0

Si esto se utiliza en un subproceso spinned off (al menos con el ejecutor-plugin), parece fallar debido a la solicitud faltante: ** java.lang.IllegalStateException: no se ha encontrado ninguna solicitud enlazado: ¿se refiere a atributos de solicitud fuera de una solicitud web real ... ** – heikkim

Cuestiones relacionadas