大家好,我有一些 jsp 页面,我使用 struts2 来处理我的表单。用户提交表单后,地址栏中显示的 url 变成了 somthing.action,所以当用户刷新页面时,表单会再次提交。我该如何处理?提交表格后。
3 回答
如果目标是防止重复提交表单,则使用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是每个 Web 技术的经典模式。
当您使用 Struts2 时,令牌拦截器是另一种方法;
如果您不关心与旧浏览器或禁用 Javascript 的浏览器的复古兼容性,还有第三种方法:HTML5的window.history.pushState
.
页面加载完成后只需将url重置为原来的,按F5就会得到原来的页面,而不是重新提交请求。
$(document).ready(function() {
window.history.pushState("","", "myOriginalUrlWithNoParams");
});
POST REDIRECT GET
需要遵循此模式以防止在刷新时重新提交表单。这意味着,在提交POST
请求后,POST
应该REDIRECT
使用GET
. 使用这种模式,如果用户刷新页面,则只会再次发生 GET 请求,因此无需更新服务器中的任何内容即可获取相同的页面。
这是推荐用于 Web 的常见设计模式。谷歌会为此提供大量资源。