我对Grails和Groovy相当陌生,并且发现了奇怪的行为。
在我的一个 Controller 类中,我有以下list()方法:
def list() {
[priceListInstanceList: PriceList.list(), priceListInstanceTotal: PriceList.count()]
}
当我从gsp g: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
中获得特定选项。我写了 Controller 部分,呈现得很好,但是当我尝试向gsp返回值时,得到了相同的消息。似乎不是我的 Controller 有普遍问题。
任何想法如何解决list2,以便它将显示在
g:select
中?谢谢。
最佳答案
您的 Controller 中有list2()
方法,而不是PriceList
域中。${vladar.PriceList.list()}
的意思是:从类“PriceList”中调用方法“list”。
似乎您误解了MVC概念以及在Grails中如何使用它。您必须准备 Controller 中的所有数据,然后传递给 View 。
对于您的情况,PriceListController.list()
是url /priceList/list
的操作。 Controller 应从db中加载所有数据(在action-method PriceList.list()
中调用list
),而GSP必须从该数据中准备html(<g:select from="${priceListInstanceList}"
)
关于grails - 底层的Grails list()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20718317/