Grails控制器方法

时间:2009-08-30 19:34:31

标签: grails

许多可用的控制器方法(链,转发,重定向)都采用了一个地图,其中包括以下键:

  • ID
  • PARAMS
  • 模型

关于这些的几个问题:

  • 'id'只是名为'id'的请求参数的别名吗?换句话说,之间有什么区别:

chain(controller: "member", action: "showProfile", params: [id: memberId])

chain(controller: "member", action: "showProfile", id: memberId)

  • chain方法(可能包括其他方法)允许将模型和/或参数(映射)从控制器操作A传递到B.实际上,通过参数将动作A中的数据传递给B之间的区别是什么和模型地图?此外,如果数据在模型映射中传递,我如何在控制器操作B中访问它?

2 个答案:

答案 0 :(得分:9)

Burt所说的一切都是正确的。此外,你想要做一个链(如果你有一个模型)或重定向(如果你没有要保留的模型)的原因是因为这两个方法都返回302重定向响应到浏览器。然后浏览器知道要求下一页。

然后在结果页面的标题中有正确的URL,而不是原始请求所在页面中的url。

这种模式在信息POST后非常有用,因为它避免了书签的各种麻烦,并且如果用户在结果页面上点击刷新,则重新提交信息。

例如:如果您要保存图书,并且想要在成功保存图书时呈现列表页面。如果您只是在方法中调用“controller.list()”,它将向用户显示已呈现的书籍列表,但网址栏仍将显示“... / book / save”。这不适合书签或重新加载。相反,调用重定向/链将向浏览器发送302响应,告诉它要求提供“... / book / list”页面。您的所有变量(您的模型和其他Flash消息)都在闪存范围内,因此它们仍然可供您的模型/视图使用,并且世界上的一切都很开心。

此模式称为Post/Redirect/Get

答案 1 :(得分:7)

'id'来自UrlMappings条目,例如“/ $ controller / $ action?/ $ id?” - 请参阅http://docs.grails.org/latest/guide/single.html#urlmappings了解使用情况。

Params是查询字符串参数或表单post参数,使用“request.getParameter('foo')”在非Grails应用程序中访问,但在Grails中简化为“params.foo”。模型映射的内容存储在Request as属性中,使用“request.getAttribute('foo')”在非Grails应用程序中访问,但在Grails中简化为“request.foo”或更通常直接在GSP中访问,例如, “$ {FOO}”。