我对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
?
谢谢。
答案 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}})