2013-05-12 1 views
0

J'ai un Grails-plugin appelé "listadmin" il existe un modèle de domaine "Liste":Grails 2.2.2 Service ne sais pas le modèle de domaine: "Pas de signature de la méthode"

package listadmin 
class Liste { 

    String internal_name 
    String public_name 

    Boolean edtiable = true 
    Boolean visible = true 

    static hasMany = [eintrage : ListenEintrag] 
    static constraints = { 
     internal_name(unique : true , blank : false); 
    } 
    String toString() { 
     "${public_name}" 
    } 

} 

J'ai le service appelé "SECO_ListenService" dans le même module (Grails-plugin):

package listadmin 

class SECO_ListenService { 

    def getEntriesOfList(String intnalListName) { 
     def aList = Liste.findByInternal_name(intnalListName) 
     return aList 
    } 
} 

maintenant, je tente d'appeler ce service à partir d'un autre module (Grails-plugin) appelé "institutionadmin". Le SECO_ListenService doit retourner une liste de chaînes pour une sélection d'un modèle de domaine dans le inistitutionadmin:

package institutionadmin 

import listadmin.SECO_ListenService 

class Einrichtung { 


    Long einrichtungs_type 
    Long type_of_conzept 
    int anzahl_gruppen 
    int anzahl_kinder_pro_Gruppe 
    String offnungszeiten 
    static hasMany = [rooms : Raum] 
    static constraints = { 
     def aList = [] 
     def sECO_ListenService = new SECO_ListenService() 
     aList=sECO_ListenService.getEntriesOfList("einrichtung_type") 
     einrichtungs_type(inList: aList) 
    } 
} 

Si je tente de lancer cette application avec les modules les deux. Je reçois l'erreur suivante:

Caused by MissingMethodException: No signature of method: listadmin.Liste.methodMissing() is applicable for argument types:() values: []

Il semblait que la classe de service ne connaissent pas la « Liste » -domain-modèle. Mais je ne sais pas où est l'erreur. J'ai également essayé d'appeler d'autres méthodes standard comme "findAll" mais sans aucun succès.

Est-ce que quelqu'un a une idée où mon erreur pourrait être?

+0

Votre service n'est pas déclaré comme attribut dans 'Einrichtung'. –

+0

Oui, je sais. Là où quelques erreurs si j'essaye de définir l'attribut. C'est pourquoi j'appelle le service comme classe/objet normal. Mais cela ne devrait pas être le problème, ou le pensez-vous? Actuellement, j'essaie de résoudre ce problème d'une autre manière. J'ai essayé d'installer le plugin: platform-core pour appeler le service d'autres modules avec une dépendance directe ... Mais il y a une autre erreur :(http://stackoverflow.com/questions/16551275/grails-platform-core-plugin -no-signature-de-méthode-événement-dans-domaine-modèle –

+0

Maintenant, je vois votre dilemme.Voir ma réponse :-) –

Répondre

0

Pour obtenir un service dans un contexte statique, vous devez accéder au haricot de printemps grailsApplication. Cela peut être fait pensé Holders. Exemple:

class MyService { 
    List<String> getAvailable() { 
    return ['A','B','C'] 
    } 
} 

class MyDomainClass { 

    String something 

    static constraints = { 
    something inList: getSomethingList() 
    } 

    static List<String> getSomethingList() { 
    def myService = Holders.grailsApplication.mainContext.getBean('myService') 
    return myService.getAvailable() 
    } 

} 
+0

Merci pour votre aide et poste intéressant. Je ne comprends pas vraiment pourquoi je dois utiliser ces supports, mais je vais google et l'essayer;) Serait-il possible, que je reçois un tel problème avec des méthodes comme "event()", comme l'autre problème/question que j'ai liée avant? –

+0

Dans un contexte statique, vous n'avez pas d'instance de votre classe de domaine, vous devez donc obtenir le service d'une autre manière. Pour l'événement, que se passe-t-il si vous utilisez 'myService.event()'? –

+0

J'ai essayé votre solution ci-dessus, mais j'ai déjà eu une erreur. Il semble que le domaine ne connaisse pas la classe Holders: la variable _Attendeur 'Holders' a été trouvée dans une portée statique mais ne fait pas référence à une variable locale, un champ statique ou une classe. Causes possibles: Vous avez tenté de référencer une variable dans la liaison ou une variable d'instance à partir d'un contexte statique. Vous avez mal orthographié un nom de classe ou un champ importé statiquement. S'il vous plaît vérifier l'orthographe. Vous avez essayé d'utiliser une méthode 'Holders' mais vous avez omis les parenthèses à un endroit non autorisé par la grammaire. _ –

Questions connexes