许多可用的控制器方法(链,转发,重定向)都采用了一个地图,其中包括以下键:
关于这些的几个问题:
chain(controller: "member", action: "showProfile", params: [id: memberId])
和
chain(controller: "member", action: "showProfile", id: memberId)
答案 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}”。