2009-08-25 6 views
2

J'essaie de créer une contrainte personnalisée. J'ai mis la logique dans un service:Injection de dépendances dans les contrôleurs de domaine Grails

class RegExpManagerService { 

    boolean transactional = false 
    def messageSource 

    def lookupRegexp(regExpression,Locale locale) { 

     def pattern = messageSource.getMessage(regExpression,null,locale) 
     return pattern 
    } 

    def testRegexp(regExpression,text,Locale locale) { 
     return text ==~ lookupRegexp(regExpression,locale) 
    } 
} 

et a essayé de l'injecter dans mon contrôleur de domaine:

class Tag extends IbidemBaseDomain { 

    def regExpManagerService 
    static hasMany=[itemTags:ItemTag] 
    static mapping = { 
     itemTags fetch:"join" 
    } 

    //Long id 
    Date dateCreated 
    Date lastUpdated 
    String tag 
    // Relation 
    Tagtype tagtype 
    // Relation 
    Customer customer 
    // Relation 
    Person updatedByPerson 
    // Relation 
    Person createdByPerson 

    static constraints = { 
     dateCreated(nullable: true) 
     lastUpdated(nullable: true) 
     tag(blank: false,validator: {val,obj -> 
       regExpManagerService.testRegexp(obj.tagtype.regexpression,val,local) 
     }) 
     tagtype(nullable: true) 
     customer(nullable: true) 
     updatedByPerson(nullable: true) 
     createdByPerson(nullable: true) 
    } 
    String toString() { 
     return "${tag}" 
    } 
} 

Lorsque la contrainte est exécuté, je reçois cette erreur:

2009-08-24 18:50:53,562 [http-8080-1] ERROR errors.GrailsExceptionResolver - groovy.lang.MissingPropertyException: No such property: regExpManagerService for class: org.maflt.ibidem.Tag 
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingPropertyException: No such property: regExpManagerService for class: org.maflt.ibidem.Tag 

Répondre

3

La fermeture des contraintes est statique, elle ne peut donc pas voir le champ d'instance 'regExpManagerService'. Mais vous avez l'objet en cours de validation, vous pouvez y accéder à partir de cela:

tag(blank: false,validator: {val,obj -> 
     obj.regExpManagerService.testRegexp(obj.tagtype.regexpression,val,local) 
    }) 
+0

C'est fait. Maintenant, je dois juste comprendre comment obtenir les paramètres régionaux ... –

Questions connexes