Grails控制器方法

Dón*_*nal 8 grails

许多可用的控制器方法(链,转发,重定向)都采用可包含以下键的映射:

  • ID
  • PARAMS
  • 模型

关于这些的几个问题:

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

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

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

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

Ted*_*eid 9

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

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

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

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

此模式称为Post/Redirect/Get.


Bur*_*ith 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中访问,例如"$ {}富".