0

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

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

4

1 回答 1

0

要在静态上下文中获取服务,您需要访问grailsApplicationspring 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()
  }

}
于 2013-05-15T11:05:32.890 回答