【问题标题】:Grails controller methodsGrails 控制器方法
【发布时间】:2009-08-30 19:34:30
【问题描述】:

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

  • 身份证
  • 参数
  • 型号

关于这些的几个问题:

  • “id”是否只是名为“id”的请求参数的别名?换句话说,两者之间有什么区别:

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

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

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

【问题讨论】:

    标签: grails


    【解决方案1】:

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

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

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

    例如:如果您正在保存一本书,并且您希望在成功保存该书的情况下呈现列表页面。如果您只是在您的方法中调用“controller.list()”,它将向用户显示被渲染的书籍列表,但 url 栏仍会显示“.../book/save”。这不适合添加书签或重新加载。相反,调用 redirect/chain 会将 302 响应发送到浏览器,告诉它请求“.../book/list”页面,它会这样做。您的所有变量(您的模型和其他 flash 消息)都在 flash 范围内,因此它们仍然可供您的模型/视图使用,并且一切都很好。

    这种模式称为Post/Redirect/Get

    【讨论】:

      【解决方案2】:

      'id' 来自 UrlMappings 条目,例如“/$controller/$action?/$id?” - 用法见http://docs.grails.org/latest/guide/single.html#urlmappings

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

      【讨论】:

      • 我查看了文档,似乎 id 实际上是一个请求参数,即您可以使用 params.id 在控制器中访问它。这和你的理解一致吗?
      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2014-05-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多