Grails渲染v响应 - 将数据传递给控制器​​的约定

时间:2016-11-28 01:01:03

标签: grails grails-controller

用于将数据从控制器传递到视图的一些Grails约定尽管阅读了文档,但我发现它有点不透明。一些基本问题:

以下是一些问题:

1)为“人”创建的脚手架中。控制器,索引操作以

结束
respond Person.list(params) model:[personCount: Person.count()]

在index.gsp中,列表将使用以下内容呈现给浏览器:

<f:table collection="${personList}" />

我的问题是,这个personList变量来自哪里?或换句话说,控制器中Person.list(...)的输出如何显示在名为personList的视图中?如果你打电话

,是否有一个可推广的规则
respond foo

和foo是一个列表,然后它将以名称&#34; fooList&#34;?

显示在控制器中

2)如果只是通过说&#34;渲染foo&#34;就可以向控制器提供一个对象,那么模型参数的目的是什么?即

之间是否存在一些差异
respond foo

respond model:[foo: foo]

似乎可以使用"${foo}"

在视图中访问这两者

3)最后,什么是&#34;响应&#34;之间区别的简洁描述。和&#34;渲染&#34;?它们似乎都将数据从控制器传递到视图。

2 个答案:

答案 0 :(得分:1)

因此,文档很好地解释了respondrender,并指出了两者之间的差异。特别是你提出的问题。

但是,无论如何我都会在这里回答:

  1. 使用respond时,它将尝试根据类型确定适当的模型变量名称。因此,对于您的示例,由于Person.list()返回List,模型变量变为personList,而在您的另一个示例中fooList,它变为fooList 1}}。有关respond的文档(具体示例)中对此进行了解释。
  2. respondrender不同之处在于respond尝试使用基于accept标头(或文件扩展名)的最合适的模型进行回复。其中render允许您更具体的控制来呈现响应,而不管accept标头(或文件扩展名)。这也在文档中对两者的描述中都很清楚。
  3. 差异的简明说明可在respondrender的说明中找到(来自文档):
  4.   

    回复:尝试返回最合适的类型   请求的内容类型(由Accept标头或文件指定   扩展)

      

    渲染:从简单文本渲染不同形式的响应   回复,查看和模板。

    简单地说:&#34;当您想要支持多种类型的响应类型并遵循Grails约定时使用respond,并在需要更具体的响应控制时使用render类型。

答案 1 :(得分:0)

  

我的问题是,这个personList变量来自哪里?

respond方法是将Person列表添加到模型中,默认情况下会从Person类名生成模型变量名。