2013-05-12 46 views
0

“法无签名”我有一个Grails,插件被称为“listadmin”有一个域模型“清单当然”:Grails的2.2.2服务不知道的领域模型:

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}" 
    } 

} 

我服务所谓在同一个模块(Grails的-插件)“SECO_ListenService”:

package listadmin 

class SECO_ListenService { 

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

现在,我尝试从所谓的“institutionadmin”的其他模块(Grails的-插件)调用此服务。该SECO_ListenService应在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) 
    } 
} 

如果我尝试运行与两个模块该应用程序。我得到以下错误:

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

它似乎是服务类不知道“Liste” - 域模型。但我不知道错误在哪里。我也尝试调用其他标准方法,如“findAll”但没有任何成功。

有没有人有一个想法,我的错误可能是什么?

+0

您的服务未在'Einrichtung'中声明为属性。 – 2013-05-13 12:36:10

+0

是的,我知道。如果我尝试定义属性,那里有一些错误。这就是为什么我像普通的类/对象那样调用服务。但那不应该是问题,或者你认为是这样吗?目前我尝试以其他方式解决这个问题。我试图安装插件:platform-core来调用具有直接依赖性的其他模块的服务......但还有另一个错误:(http://stackoverflow.com/questions/16551275/grails-platform-core-plugin -no-signature-of-method-event-in-domain-model – 2013-05-14 19:29:53

+0

现在我看到你的困境。看到我的回答:-) – 2013-05-15 11:05:57

回答

0

要在静态环境中获得服务,您需要访问grailsApplication spring bean。这可以被认为是Holders。例如:

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

感谢您的帮助和有趣的帖子。我不真正理解为什么我必须使用这些持有者,但我会谷歌它并尝试它;)有可能,我得到这样的问题,像“事件()”,像其他问题/问题我之前链接? – 2013-05-15 16:06:21

+0

在静态上下文中,您没有您的域类的实例,因此您需要以另一种方式获得服务。对于事件,如果使用'myService.event()'会发生什么? – 2013-05-15 16:09:12

+0

我上面试过了你的解决方案,但是我之前遇到了一个错误。它似乎是域不知道持有者类:_Apparent变量'持有人'被发现在一个静态范围内,但没有引用局部变量,静态字段或类。可能的原因: 您试图从静态上下文中引用绑定中的变量或实例变量。 拼写错误的类名或静态导入的字段。请检查拼写。 您试图使用方法'Holders',但在方括号中省略了语法所不允许的地方._ – 2013-05-15 16:21:18