引擎盖下的Grails list()方法

时间:2013-12-21 11:05:57

标签: grails gsp grails-controller

我对Grails和Groovy很新,发现了奇怪的行为。 在我的一个控制器类中,我有以下list()方法:

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

当我从我的gsp g中调用它时:选择一切正常:

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

现在,如果我将创建一个与list()完全相同的新方法,并将名称更改为list2()

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

并更改g:相应地选择:

<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? 谢谢。

1 个答案:

答案 0 :(得分:2)

您的控制器中有方法list2(),而不是PriceList域中的方法${vladar.PriceList.list()}

PriceListController.list()表示:从“PriceList”类调用方法“list”。

似乎你误解了MVC概念,以及它如何在Grails中使用。您必须在控制器中准备所有数据,然后传递给视图。

对于您的情况,/priceList/list是针对网址PriceList.list()的操作。控制器应该从db加载所有数据(在action-method list内调用<g:select from="${priceListInstanceList}"),GSP必须从这些数据({{1}})

准备html
相关问题