在WEB开发中都会碰见这样的情况,就是用户在进行了一项操作后按F5刷新页面会重复提交页面的问题。
先了解下浏览器按F5会发生什么事,在按下F5后浏览器并不是简单的刷新页面,而是模拟上一次的请求一模一样的再向服务器请求一次,加入上一次的请求是向服务器请求保存数据,那按F5后就会再一次请求保存数据,这样就等于重复提交了一次保存数据,如果我们系统中不做判断的话,很容易在用户不小心按F5后再一次把数据保存进数据库了。
方案:
因为按F5是完全模拟上次的请求再请求一次,可以说发送的数据和上次请求的是一样的,就想到可以在客户端和服务器端各保存一个标识状态,然后在请求中比较2个表示状态就好了。
我把我的解决方法做成1个组件,这样就可以在所有需要使用的页面上使用该组件了,下面就直接看组件的代码吧
(如何编写组件这里就先不说)。



































































在页面中使用如下:
<%@ taglib uri="http://www.byd.com.cn/component" prefix="byd" %>
<byd:HtmlRefresh id="HtmlRefresh1" binding="#{Page1.htmlRefresh1}" />
JAVABEAN代码:
private HtmlRefresh htmlRefresh1 = new HtmlRefresh();
public HtmlRefresh getHtmlRefresh1() {
return htmlRefresh1;
}
public void setHtmlRefresh1(HtmlRefresh htmlRefresh1) {
this.htmlRefresh1 = htmlRefresh1;
}
public String button1_action() {
// 先判断是否刷新
if(htmlRefresh1.IsRefresh()){
this.label1.setText("请别刷新提交");
}else{
this.label1.setText("正常提交");
}
return null;
}
开发环境:NetBeans5.5.1 + netbeans-visualweb-5_5-windows-zh_CN.exe
附原代码: 点击下载