【发布时间】:2012-11-11 19:45:54
【问题描述】:
大家好,我有一些 jsp 页面,我正在使用 struts2 来处理我的表单。 用户提交表单后,地址栏中显示的url变成了somthing.action,所以当用户刷新页面时,表单又被提交了。我该如何处理?提交表单后。
【问题讨论】:
大家好,我有一些 jsp 页面,我正在使用 struts2 来处理我的表单。 用户提交表单后,地址栏中显示的url变成了somthing.action,所以当用户刷新页面时,表单又被提交了。我该如何处理?提交表单后。
【问题讨论】:
如果目标是防止重复提交表单,请使用token拦截器http://struts.apache.org/2.x/docs/token-interceptor.html或tokenSession拦截器http://struts.apache.org/2.x/docs/token-session-interceptor.html。
如果您只是想在提交后刷新页面而不再次提交,则重定向到只显示结果而不显示表单的操作。为此使用redirectAction 结果。
【讨论】:
+1 对其他两个答案。
Post/Redirect/Get 是所有网络技术的经典模式。
Token Interceptor 是另一种方法,当您使用 Struts2 时;
如果您不关心与旧浏览器或禁用 Javascript 的浏览器的复古兼容性,还有第三种方法:HTML5 的window.history.pushState。
页面加载完毕后,将url重置为原来的,按F5会得到原来的页面,而不是重新提交请求。
$(document).ready(function() {
window.history.pushState("","", "myOriginalUrlWithNoParams");
});
【讨论】:
POST REDIRECT GET
需要遵循此模式以防止在刷新时重新提交表单。这意味着,在提交POST 请求后,POST 应发送REDIRECT 响应以使用GET 获取目标页面。使用此模式,如果用户刷新页面,则只会再次发生 GET 请求,因此无需更新服务器中的任何内容即可获取相同的页面。
这是推荐用于 Web 的常见设计模式。 Google 会为此提供大量资源。
【讨论】: