Grails render v respond - 将数据传递给控制器的约定
Grails render v respond - conventions for passing to data to the controller
尽管阅读了文档,但我发现一些将数据从控制器传递到视图的 Grails 约定有点不透明。几个基本问题:
这里有一些问题:
1) 在为 'Person' 控制器创建的脚手架中,索引操作以
结束
respond Person.list(params) model:[personCount: Person.count()]
在 index.gsp 中,列表使用以下方式呈现给浏览器:
<f:table collection="${personList}" />
我的问题是,这个 personList 变量是从哪里来的?或者换句话说,控制器中 Person.list(...) 的输出如何显示在名称为 personList 的视图中?关于是否调用
是否有通用规则
respond foo
而 foo 是一个列表,那么它将以名称 "fooList"?
显示在控制器中
2) 如果说"render foo"就可以给controller提供一个对象,model参数的作用是什么?即
之间有区别吗
respond foo
和
respond model:[foo: foo]
似乎两者都可以在视图中使用 "${foo}"
访问
3)最后,简述一下"respond"和"render"的区别是什么?他们似乎都将数据从控制器传递到视图。
因此,文档很好地解释了两者 respond and render 并指出了两者之间的区别。特别是你问的问题。
不过,我还是会在这里回答他们:
- 使用
respond
时,它将尝试根据类型确定适当的模型变量名称。因此,对于您的示例,由于 Person.list()
returns a List
模型变量变为 personList
而在您的另一个示例中,如果 foo
是 List
它确实变成了 fooList
。这在有关 respond 的文档中进行了解释(带有具体示例)。
respond
和 render
的不同之处在于 respond
尝试根据 accept
header(或文件扩展名)使用最合适的模型进行回复). render
允许您更具体地控制呈现响应,而不管 accept
header(或文件扩展名)。这在文档中对两者的描述中也很清楚。
- 在
respond
和 render
的描述中可以找到对差异的 简明 描述(来自文档):
Respond: Attempts to return the most appropriate type for the
requested content type (specified by either the Accept header or file
extension)
和
Render: To render different forms of responses from simple text
responses, to view and templates.
简单来说:“当你想要支持多种类型的响应类型并遵循Grails约定时使用respond
,当你想要对响应类型进行更具体的控制时使用render
.
My question is, where did this personList variable come from?
respond
方法正在将 Person
的列表添加到模型中,默认情况下将从 Person
class 名称生成模型变量名称。
尽管阅读了文档,但我发现一些将数据从控制器传递到视图的 Grails 约定有点不透明。几个基本问题:
这里有一些问题:
1) 在为 'Person' 控制器创建的脚手架中,索引操作以
结束respond Person.list(params) model:[personCount: Person.count()]
在 index.gsp 中,列表使用以下方式呈现给浏览器:
<f:table collection="${personList}" />
我的问题是,这个 personList 变量是从哪里来的?或者换句话说,控制器中 Person.list(...) 的输出如何显示在名称为 personList 的视图中?关于是否调用
是否有通用规则respond foo
而 foo 是一个列表,那么它将以名称 "fooList"?
显示在控制器中2) 如果说"render foo"就可以给controller提供一个对象,model参数的作用是什么?即
之间有区别吗respond foo
和
respond model:[foo: foo]
似乎两者都可以在视图中使用 "${foo}"
3)最后,简述一下"respond"和"render"的区别是什么?他们似乎都将数据从控制器传递到视图。
因此,文档很好地解释了两者 respond and render 并指出了两者之间的区别。特别是你问的问题。
不过,我还是会在这里回答他们:
- 使用
respond
时,它将尝试根据类型确定适当的模型变量名称。因此,对于您的示例,由于Person.list()
returns aList
模型变量变为personList
而在您的另一个示例中,如果foo
是List
它确实变成了fooList
。这在有关 respond 的文档中进行了解释(带有具体示例)。 respond
和render
的不同之处在于respond
尝试根据accept
header(或文件扩展名)使用最合适的模型进行回复).render
允许您更具体地控制呈现响应,而不管accept
header(或文件扩展名)。这在文档中对两者的描述中也很清楚。- 在
respond
和render
的描述中可以找到对差异的 简明 描述(来自文档):
Respond: Attempts to return the most appropriate type for the requested content type (specified by either the Accept header or file extension)
和
Render: To render different forms of responses from simple text responses, to view and templates.
简单来说:“当你想要支持多种类型的响应类型并遵循Grails约定时使用respond
,当你想要对响应类型进行更具体的控制时使用render
.
My question is, where did this personList variable come from?
respond
方法正在将 Person
的列表添加到模型中,默认情况下将从 Person
class 名称生成模型变量名称。