【问题标题】:Grails list() method under the hood底层 Grails list() 方法
【发布时间】:2013-12-21 11:05:56
【问题描述】:

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

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

当我从我的 gsp g:select 调用它时,一切正常:

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

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

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

并相应地更改 g:select:

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

【问题讨论】:

    标签: grails gsp grails-controller


    【解决方案1】:

    您的控制器中有方法list2(),而不是您的PriceList 域。

    ${vladar.PriceList.list()} 表示:从类 'PriceList' 中调用方法 'list'。

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

    对于您的情况,PriceListController.list() 是对 url /priceList/list 的操作。控制器应该从 db 中加载所有数据(在 action-method list 中调用 PriceList.list())并且 GSP 必须从这些数据中准备 html(&lt;g:select from="${priceListInstanceList}"

    【讨论】:

    • 你好,伊戈尔。谢谢指导。现在很清楚我在哪里犯了错误。我稍后会做出改变。问候,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多