0

这个问题通常与语言/框架无关,但如果这很重要,我会与 Grails 合作,并且最感兴趣的是 grails 特定的解决方案(如果存在)。

有一个映射到 URL: 的表单/foo/create。当用户在他的浏览器中输入这个 URL 时,表单就会显示出来。

表单动作属性指向/foo/save具有方法POST。如果保存成功,则应用标准的 post-redirect-get 模式,并将用户重定向到/foo/show.

但是,如果用户指定了不正确的数据,他们应该会再次看到相同的表单,其中包含错误消息并保留所有数据。为了实现这种行为,我forward对产生表单的控制器进行了处理(同样映射到/foo/create)。

在该用户看到带有数据和错误消息的表单后,但浏览器中的 URL 字段更改为/foo/save. 如果用户将焦点更改为 URL 字段并按 Enter - 将显示 404(因为没有任何内容映射到/foo/save+method=GET对)。

长话短说:URL/foo/save显示在浏览器中(因为提交表单后没有重定向),但如果通过 HTTP GET 方法访问,它会指向无处。

如何处理这种情况?当然,我可以映射一些东西,/foo/save但我想知道是否有办法在提交错误数据的表单后不更改浏览器中显示的 URL?

4

1 回答 1

2

两种方法:

  1. 表单提交给自己,即/foo/create提交给/foo/create,只有当页面成功重定向到 时/foo/show。这也应该使用 post-redirect-get 循环并将提交的数据存储在会话中,但可以是没有重定向的简单 POST。
  2. /foo/save /foo/create如果数据无效或数据有效,总是会再次重定向/foo/show。这将始终使用保存在会话中的数据的后重定向获取循环。
于 2012-11-03T19:04:28.323 回答