forms - 提交错误数据后,如何在浏览器中处理URL并转换为表单 Action 值?

标签 forms http grails web-applications language-agnostic

这个问题通常与语言/框架无关,但是如果有问题的话,我将与Grails合作,并且如果有这样的解决方案,则对Grails特定解决方案最感兴趣。

有一个映射到URL的表单:/foo/create。当用户在浏览器中输入此URL时,将显示表单。

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

但是,如果用户指定了不正确的数据,则他们应该再次看到相同的表格,并显示错误消息并保留所有数据。为了实现此行为,我对生成表单的 Controller 执行forward(将其映射到/foo/create)。

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

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

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

最佳答案

两种方法:

  • 表单提交给自己,即/foo/create提交给/foo/create,仅当页面成功重定向到/foo/show时。这也应该使用post-redirect-get周期,并将提交的数据存储在 session 中,但是可以是没有重定向的简单POST。
  • /foo/save总是再次重定向,如果数据无效,则重定向到/foo/create,如果数据有效,则重定向到/foo/show。这将始终使用重定向后获取周期,并将数据保存在 session 中。
  • 关于forms - 提交错误数据后,如何在浏览器中处理URL并转换为表单 Action 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211633/

    相关文章:

    html - 如何提高不需要登录的在线表单的安全性?

    java - 使用 Spring-WS 客户端动态设置自定义 HTTP header

    javascript - 在 AngularJS 中使用 ng-repeat 调用和迭代函数返回值

    java - Grails 和 PermGen 与 g :link and g:render 相关的问题

    angularjs - Grails 3 Asset 插件未添加 *.tpl.html 文件

    grails - 如何更改Glassfish的默认错误页面?

    html - 使用 CSS 将所有 HTML 表单元素居中

    javascript - 如何从 Javascript 更改 HTML 单选按钮选择?

    javascript - 多个变量

    java - 露天休息,文件上传: cannot set description and filename