2013-12-21 29 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