用于将数据从控制器传递到视图的一些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;?它们似乎都将数据从控制器传递到视图。
答案 0 :(得分:1)
因此,文档很好地解释了respond和render,并指出了两者之间的差异。特别是你提出的问题。
但是,无论如何我都会在这里回答:
respond
时,它将尝试根据类型确定适当的模型变量名称。因此,对于您的示例,由于Person.list()
返回List
,模型变量变为personList
,而在您的另一个示例中foo
是List
,它变为fooList
1}}。有关respond的文档(具体示例)中对此进行了解释。respond
和render
不同之处在于respond
尝试使用基于accept
标头(或文件扩展名)的最合适的模型进行回复。其中render
允许您更具体的控制来呈现响应,而不管accept
标头(或文件扩展名)。这也在文档中对两者的描述中都很清楚。respond
和render
的说明中找到(来自文档):回复:尝试返回最合适的类型 请求的内容类型(由Accept标头或文件指定 扩展)
和
渲染:从简单文本渲染不同形式的响应 回复,查看和模板。
简单地说:&#34;当您想要支持多种类型的响应类型并遵循Grails约定时使用respond
,并在需要更具体的响应控制时使用render
类型。
答案 1 :(得分:0)
我的问题是,这个personList变量来自哪里?
respond
方法是将Person
列表添加到模型中,默认情况下会从Person
类名生成模型变量名。