如何在struts1中刷新jsp页面后停止重新提交表单数据

时间:2013-05-17 05:16:11

标签: jsp struts1

刷新jsp后我有问题。当我在提交表格后调用refresh(F5)按钮时。每次调用刷新按钮后重复保存的数据。

2 个答案:

答案 0 :(得分:2)

1.为了防止这种情况,请使用ajax选项进行提交。

OR

2.在表单提交后使用REDIRECT选项并重定向页面。

将表单提交到服务器时会发生什么

通过单击表单上的“提交”按钮,向Web服务器发送请求,其中包括在表单上输入的所有数据。不仅URL而且表单数据也是请求的一部分,浏览器会记住此请求。如果用户单击“刷新”,浏览器将重复该请求,再次向Web服务器发送相同的URL和表单数据。

表单可以通过两种方式提交,GET或POST.GET请求没有副作用;它只提取数据但不对数据库进行任何更改。换句话说,如果请求更改了插入,更新,删除操作等数据,那么它应该是一个POST。

最重要的区别是浏览器会在用户尝试重复POST时警告用户 - 点击“刷新”会弹出一个警告用户的对话框 这可能会导致重复操作,并确认他们确实要重新提交。刷新GET请求时,浏览器不会显示此确认信息。

如果您的表单使用GET方法,将其更改为POST是最简单的解决方案,因为这至少意味着如果用户尝试刷新,则会收到警告。

但更好的解决方案是POST + REDIRECT + GET。更多http://en.wikipedia.org/wiki/Post/Redirect/Get

答案 1 :(得分:0)

使用众所周知的PRG pattern。有关详细信息,请查看此处:link

或者更简单的解决方案是从Action class添加一个request attribute发送控件,同时在JSp上检查该特定请求属性,如果它在那里:将控件重定向到同一个JSp页面

背后的逻辑:解释: 当重定向发生时,它向浏览器发出匿名请求而没有任何输出,然后浏览器向目标资源发出隐式请求。因此,虽然重定向您的请求通过浏览器往返一次,这就是您以前的request & response对象被销毁的原因,并且生成了一个新的请求(隐式地通过浏览器制作),并且容器创建了新请求的对象。因此,您之前的请求属性将不存在。意味着您之前的数据也不会存在。然后从下一次开始,当您刷新JSP页面时,不会发生任何事情。