刷新页面(浏览器按钮)导致再次将项目保存到数据库

时间:2012-11-23 13:57:05

标签: jsf jsf-2

情况:

  • 想象一个用于向数据库添加项目的表单
  • 用户正确填写表单并使用保存按钮(h:commandButton)将项目保存到DTB中
  • 已保存对象的生命周期已完成且表单已清除
  • 之后,用户(不要问我原因:-))按浏览器的刷新按钮
  • ,结果是=> DTB中有两个几乎相同的项目(创建时间不同)

我该如何防止这种行为?

1 个答案:

答案 0 :(得分:2)

两种方式:

  1. 使用ajax执行操作(这不会生成浏览器历史记录)。

    <h:commandButton ...>
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
    
  2. 发布后发送重定向(称为POST-Redirect-GET模式)。

    public String save() {
        // ...
        return "sameview?faces-redirect=true";
    }