1

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

4

2 回答 2

2

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

或者

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

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

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

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

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

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

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

于 2013-05-17T06:54:33.310 回答
0

使用众所周知的PRG pattern. 有关更多信息,请查看此处:链接

或者更简单的解决方案是在从您的Action classadd one发送控制request attribute时,在 JSp 检查该特定请求属性时,如果存在:将控件重定向到您的同一个 JSp 页面。

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

于 2013-10-10T11:54:00.920 回答