grails - 底层的Grails list()方法

标签 grails gsp grails-controller

我对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/

相关文章:

memory - 在Grails中使用内存域对象的最佳方法是什么?

javascript - 将 javascript 变量传递给 gsp g :link tag

model-view-controller - 如何扩展/覆盖插件的 Controller 操作?

rest - Grails 的内容协商如何处理相反的类型?

grails - Grails唯一约束无法更新

exception - 保存操作时出现 MissingMethodException

grails - 如何使用grails <g:set>标记 session 作用域?

asp.net-mvc - 什么是 ASP 的 ContentPlaceHolder 的 Grails GSP 等价物?

Grails REST CRUD Controller 方法

grails - 在范围为='session'的 Controller 中Grails 3存储 session 数据?