【问题标题】:Grails iterate over objects in the controllerGrails 遍历控制器中的对象
【发布时间】:2011-11-15 16:27:44
【问题描述】:

在 Grails 中,要在表格中显示某项内容的列表,我通常会执行以下操作:

我的控制器是

thingController {

def temp2 = something.findAllByXXX(yyy)

[temp : temp2]
}

在我看来,我有:

<g:each var="it" in="${temp}">
${it.someThing}
${it.someThingSomething}
<g:each>

我不知道这是否是最好的方法。是否有可能做同样的事情,但不是调用所有对象,然后在 gsp 中迭代它们,而是在控制器端做这一切。意思是,不是将所有对象传递给视图,而是传递单个对象。

【问题讨论】:

  • 这似乎是不可能的,因为控制器不能在每个请求中多次调用render()

标签: grails loops controllers


【解决方案1】:

我不知道这是否是最好的方法。是否有可能做同样的事情,但不是调用所有对象,然后在 gsp 中迭代它们,而是在控制器端做这一切。意思是,不是将所有对象传递给视图,而是传递单个对象

我想我不明白您提出的替代上述代码的建议。但 AFAIK 上面的代码是在 GSP 中显示项目列表的最常用方式,因此除非它给您带来特定问题,否则我不会费心寻找替代方案。

【讨论】:

  • 好的,非常感谢。有时我怀疑做某些事情的最佳方法,并且认为它有效,可能有更简单和更好的方法来做到这一点,我一直在学习:p 如果没有更好的方法,我会接受答案:p
【解决方案2】:

这是可能的,但我认为这不是一个好主意,除非是出于非常具体的原因。例如,如果您总是希望查询中有两个对象,并且它们需要以不同的方式显示,那么您可能希望拥有像 [object1: temp2[0], object2: temp2[1]] 这样的模型。

构造视图以避免迭代混乱的好方法是使用模板。你可以有这样的视图:

<g:each var="it" in="${temp}">
  <g:render template="someThing" model="[someThingInstance: it]"/>
</g:each>

还有一个显示单个对象的模板_someThing.gsp

<div>${someThingInstance.field1}</div>
<div>${someThingInstance.field2}</div>

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多