2013-12-21 80 views
1

我對Grails和Groovy來說很陌生,發現奇怪的行爲。 在我的控制器類中的一個我有以下list()方法:引擎蓋下的Grails list()方法

def list() { 
    [priceListInstanceList: PriceList.list(), priceListInstanceTotal: PriceList.count()] 
} 

,當我從我的GSP摹調用此:選擇一切正常:

<g:select name="priceListId" from="${vladar.PriceList.list()}" optionKey="id" optionValue="priceListName" /> 

現在,如果我要一種新的方法完全相同的像列表()和名稱改爲列表2()

def list2() { 
    [priceListInstanceList: PriceList.list(), priceListInstanceTotal: PriceList.count()] 
} 

和變化克:相應地選擇:

<g:select name="priceListId" from="${vladar.PriceList.list2()}" optionKey="id" optionValue="priceListName" /> 

我得到一個錯誤信息:

Class 
groovy.lang.MissingMethodException 

Message 
No signature of method: vladar.PriceList.list2() is applicable for argument types:() values: [] Possible solutions: list(), list(java.util.Map), last(), last(java.lang.String), last(java.util.Map), first() 

看起來有一些魔法與引擎蓋下list()方法。 我想在g:select中獲得具體的選項。我寫了控制器部分,它呈現得很好,但是當我試圖返回值給gsp時得到相同的消息。 看來這是一般問題,而不是我的控制器。 任何想法如何解決list2所以它會顯示在g:select? 謝謝。

回答

2

您的控制器中有方法list2(),而不是您的PriceList域中。

${vladar.PriceList.list()}表示:從類'PriceList'中調用方法'list'。

似乎你誤解了MVC的概念,以及它在Grails中的用法。您必須準備控制器中的所有數據,並傳遞到視圖。

對於你的情況​​是對url的操作/priceList/list。控制器應該加載數據庫中的所有數據(在動作方法list中調用PriceList.list()),並且GSP必須從該數據準備html(<g:select from="${priceListInstanceList}"

+0

Hello Igor。感謝您的指導。現在很清楚我犯了什麼錯誤。稍後我會做出更改。問候, – Robert