【问题标题】:How to implement a POST-REDIRECT-GET in Play Framework如何在 Play 框架中实现 POST-REDIRECT-GET
【发布时间】:2013-09-15 00:46:10
【问题描述】:

假设我有两个控制器方法:Users.preInsert 和 Users.insert。 preInsert 方法用于显示用户输入表单 (GET),而 insert 方法负责实际插入 (POST) 或调用“插入”服务。 路线是这样的:

GET    /users/add                           controllers.Users.preInsert(...)
POST    /users/add                           controllers.Users.insert(...)

那么如何在不丢失插入服务返回的错误消息和客户端输入的值等参数的情况下重定向请求(POST 到 GET),以便在输入表单中访问和显示它们。参数可能涉及一些复杂的对象。我已经使用缓存 API 实现了它,但我想知道是否有更好的方法。

【问题讨论】:

  • 你应该使用会话而不是缓存。
  • @LorenzMeyer 你只能在会话中存储字符串值
  • 抱歉,我认为是 PHP 而不是 Java。但是你不能序列化你的数据吗?

标签: scala playframework-2.0 post-redirect-get


【解决方案1】:

这就是 Form 对象 (http://www.playframework.com/documentation/2.1.1/ScalaForms) 的确切用途。

我认为您的routes 中有一个错误,可能如下所示:

GET    /users/add                           controllers.Users.preInsert(...)
POST   /users/add                           controllers.Users.insert(...)

你应该看看form sample

【讨论】:

  • 感谢您指出错误。我现在修好了。关于表单,是的,我也将它们与 Cache API 一起使用。
  • 另外,感谢您的示例(第一次阅读您的答案时,我没有看到最后一个链接)。现在一切正常。
【解决方案2】:

您不需要将其重定向回preInsert 操作,而是在insert 的开头检查表单是否有错误并且它已显示包含表单的视图(相同你在preInsert 中使用的strong>)。它在 处理绑定失败

部分的 doc mentioned by nico_ekito 中进行了描述

【讨论】:

  • ...但是如果我点击刷新按钮,会出现一个表单重新提交对话框,因为它是一个发布请求
  • ...但是任何 HTML 表单都不是要刷新的主题 - 如果用户刷新视图,它将显示带有 preInsert 操作和空白表单的 GET 路由 - 这是非常明显的行为。
猜你喜欢
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多