我有一个名为“listadmin”的grails-plugin,有一个域模型“Liste”:
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-plugin)中有一个名为“SECO_ListenService”的服务:
package listadmin
class SECO_ListenService {
def getEntriesOfList(String intnalListName) {
def aList = Liste.findByInternal_name(intnalListName)
return aList
}
}
现在我尝试从名为“institutionadmin”的其他模块(grails-plugin)调用此服务。 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)
}
}
如果我尝试使用这两个模块运行此应用程序。我收到以下错误:
由MissingMethodException引起:没有方法签名: listadmin.Liste.methodMissing()适用于参数类型:() 值:[]
似乎服务类不知道“Liste”-domain-model。但我不知道错误在哪里。我还尝试调用其他标准方法,如“findAll”但没有任何成功。
有人知道我的错误可能在哪里吗?
答案 0 :(得分: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()
}
}