奇怪,右键点刷新会把数据又往后台提交一次!

VCboxer 2004-09-07 03:18:38
我在一个列表页面上点增加按钮,到一个增加的页面,把数据输入后点提交返回到列表页面,这时候用右键点后选择刷新,会弹出一个对话框,问是否重新发送信息,选择是后就会添加一条一摸一样的记录,好像刚才的动作又执行了一遍,这个太可怕了,有什么办法避免吗?
...全文
338 点赞 收藏 30
写回复
30 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
追求自由 2004-09-10
这个问题是很基本的问题吧,用struts可能要麻烦一点,用纯粹的jsp没有什么难的:
add.jsp用来填写表单。
addSave.jsp用来进入数据库操作,在该页处现完成后再用
<script language="javascript">
window.document.location="add.jsp";
</script>
跳回add.jsp就行了。
回复
追求自由 2004-09-10
http://community.csdn.net/Expert/topic/3357/3357252.xml?temp=.6883203
回复
rocketliu8899 2004-09-09
学习
回复
romeo 2004-09-09
我原来也遇到这种情况,我用得是struts也有这情况,

但是最近看了一本好书,知道如何去做了,呵呵,

我说说它得原理吧,

当进入add.jsp页面之前,先生成一个新得令牌(可根据系统时间,网卡Id什么得生成),

把这个令牌存到session中,然后进入add.jsp,用<input type=hidden>存放令牌值,

然后数据提交到adddata.jsp,此时,先判断提交上来得令牌和session中得令牌是否一致,

如果一致则把数据存入数据库,当数据成功存入数据库后,

立即从session中删掉此令牌返回,如果刷新页面,则到adddate.jsp页面得时候,

就会判断出提交上来得令牌和session中令牌不一致(因为session中得令牌被删掉了)

于是不能添加到数据库,返回,

这个方法也可以避免利用IE后退按钮再次提交数据,

在struts中有自动生成令牌得api,不用自己编写生成令牌得函数了,呵呵

参考:org.apache.struts.action.Action中:

protected boolean isTokenValid(javax.servlet.http.HttpServletRequest request)

protected void resetToken(javax.servlet.http.HttpServletRequest request)

protected void saveToken(javax.servlet.http.HttpServletRequest request)

jsp也可以利用其原理实现防止重复提交得问题
回复
VCboxer 2004-09-08
to wsmall1(最近很忙) :
现在我也是跳转到其他页去的,但是好像原来那个链接在那个页上保留了,所以我刷新的时候会再次把原来的链接提交上去。是getServletContext().getRequestDispatcher(nextPage).forward(request, response)的缘故吗?
回复
fjy351 2004-09-08
请告诉我如何提问啊?我怎么无法提问呢?它提示到最小社区提问,这应该是最小社区了啊
回复
wsmall1 2004-09-08
你用的框架,f5刷新的时候,他是刷新整个框架,当然没有问题。
但是你在单独的块中右键刷新,就会再次的提交,一般我得做法是当提交成功的时候,我会跳转到其他的页去,不会在给他机会重新提交一次的。
回复
batxie 2004-09-08
是不是因为刷新后重定向的问题 你在提交这个页面后 在给它定向到 初始化的页面
比如action="init.do" 呵呵
回复
flyylf 2004-09-08
跳转,执行完毕后所显示的页,也就是你能够刷新的那个页一定不能有执行插入的语句.而是一个单纯的显示结果的页.
回复
Ronanljy 2004-09-08
很正常的情况,我一直是这样,还没有碰到不方便的地方,就没去想它。
回复
VCboxer 2004-09-08
to tanyun1111(TY):
我现在用的就是框架,按F5刷新是没有问题,但是如果在框架里面右键->刷新就要出现那种情况

to Little_qd(中上):
跳转的方式怎么不对?能给出解决办法吗?

各位应该碰到过这种情况吧?
回复
VCboxer 2004-09-08
也就是说只要在servlet里面用forward的都会有这种问题?
回复
liueos 2004-09-08
就是提交以后页面变了,但是你看ie的地址栏里的地址没变,你重新刷新就是刷新的以前的叶面,当然重复提交了。forward(request, response)改成response.sendRedirec("index.jsp"),response.sendRedirec("index.jsp")这时jsp里的写法,但是servlet里面具体不清楚,应该差不多,你自己试吧
回复
Little_qd 2004-09-07
应该是处理完跳转的方式不对

回复
freebirdwjy 2004-09-07
学习
回复
baffling 2004-09-07
gz
回复
tanyun1111 2004-09-07
刷新等于再次提交,我就遇到过这个问题,当我提交完后向数据库添加了一条记录,然后弹出提示框"添加成功!",再跳转到原来页面,代码是:location.href="aaaaa?action=aaa";
按F5时会又提交一次.
不过我要求做页面的把静态页面都改成框架式就不会有这个问题了,你不妨试试.
不过跳转的代码改为:parent.location.href=".......";
回复
VCboxer 2004-09-07
to zhukejun(不管政府、别人怎么样,我的抗日从抵制日货开始) :
我现在就是两个页面的,但是提交的链接是通过两个码来传输的,一个为交易码,另外一个为子码,一个页面链接由这两个组成,比如交易码为user,子码有add,del等,现在当我执行完一个增加的动作的时候,是提交user和add这两个码到后台,再具体处理。现在问题是再次刷新的时候,会把这两个码又提交上去。真是头疼死了
回复
900126 2004-09-07
如果系统没有提供可靠的方法,其他技术手段是靠不住的。
回复
zhukejun 2004-09-07
另:1和2可以合并
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-07 03:18
社区公告
暂无公告