2009-12-21 3 views
6

Je me demandais si quelqu'un avait une idée de la meilleure façon de fournir la fonctionnalité de bindData() en dehors de mes contrôleurs grails. Dans mon projet actuel j'ai créé plusieurs classes groovy pour modéliser des objets retournés par une API. Dans ces classes j'ai une méthode statique qui analyse xml et retourne une liste d'objets de la classe. Je voudrais passer tout le type coulée non-sens en utilisant la méthode bindData dans ces classes. Toute suggestion sur comment faire ceci serait appréciée.Utilisation de la méthode bindData en dehors du contrôleur

Répondre

8

Je cherchais une solution similaire, pour utiliser bindData dans une classe de service. J'ai trouvé une solution dans JT's blog. La solution consiste essentiellement à l'importation:

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

puis ajoutez ceci à votre code:

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

Le (Object []) du casting est nécessaire pour Groovy/Java compatibilité. (Groovy traite l'objet 'args comme une ArrayList, pas un tableau d'objets.)

+0

Si cela est utilisé dans un thread dérivé (au moins avec executor-plugin), il semble échouer à cause d'une requête manquante: ** java.lang.IllegalStateException: aucune requête liée au thread trouvée: faites-vous référence à des attributs de requête en dehors d'une requête Web réelle ... ** – heikkim

Questions connexes