【问题标题】:How to stop resubmit form data after refreshing jsp page in struts1struts1中刷新jsp页面后如何停止重新提交表单数据
【发布时间】:2013-05-17 05:16:10
【问题描述】:

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

【问题讨论】:

    标签: jsp struts1


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      使用众所周知的PRG pattern。更多信息请看这里:link

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-07
        • 2015-08-30
        • 2014-04-20
        • 1970-01-01
        • 2013-10-27
        相关资源
        最近更新 更多