2013-05-12 32 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