这个问题通常与语言/框架无关,但是如果有问题的话,我将与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/