grails 2.2.2服务不知道域模型:“没有方法签名”

时间:2013-05-12 20:08:02

标签: grails service domain-model

我有一个名为“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”但没有任何成功。

有人知道我的错误可能在哪里吗?

1 个答案:

答案 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()
  }

}