Grails遍历控制器中的对象

时间:2011-11-15 16:27:44

标签: grails loops controllers

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

我的控制器是

thingController {

def temp2 = something.findAllByXXX(yyy)

[temp : temp2]
}

在我看来,我有:

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

我不知道这是否是最佳方法。是否有可能完成同样的事情,但不是调用所有对象,而是在gsp中迭代它们,在控制器端执行此操作。意思是,不是将所有对象传递给视图,而是传递单个对象。

2 个答案:

答案 0 :(得分:2)

  

我不知道这是否是最佳方法。是否有可能完成同样的事情,但不是调用所有对象,而是在gsp中迭代它们,在控制器端执行此操作。意思是,不是将所有对象传递给视图,而是传递单个对象

我认为我不明白你的建议作为上述代码的替代方案。但是AFAIK上面的代码是在GSP中显示项目列表的最常见方式,所以除非它导致您遇到特定问题,否则我不会费心寻找替代方案。

答案 1 :(得分:0)

这是可能的,但我不认为这是一个好主意,除非是出于非常具体的原因。例如,如果您总是希望查询中有两个对象,并且它们需要以不同方式显示,那么您可能希望拥有类似[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>