【问题标题】:How to deal with URL in browser which is changed to form action value after wrong data is submitted?如何处理提交错误数据后浏览器中的URL更改为表单操作值?
【发布时间】:2012-11-03 17:25:13
【问题描述】:

这个问题通常与语言/框架无关,但如果这很重要,我会与 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?

【问题讨论】:

    标签: forms http grails web-applications language-agnostic


    【解决方案1】:

    两种方法:

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

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      相关资源
      最近更新 更多