论坛首页 Java版 Webwork

IE浏览器重复提交的问题!

浏览 18807 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2004-08-25
比如客户点击一个URL: delArticle.action?aritcleId=100
我后台的anction执行了这个删除之后,再重定向到一个url:
listAllArticles.action  给客户看结果!
然而,客户在看listAllArticles.action时,习惯性的点击了刷新,因为delArticle.action?articleId=100这个url还保留在IE地址栏中,结果,刷新就重复发送了这个delArticle.action,导致后台返回客户出错信息。然而,客户的本意是刷新查看listAllArticles.action!
对于这种重定向的问题,大家是怎么解决IE端的地址栏更新问题呢??
   
最后更新时间:2004-08-25
Core J2EE Patterns第二版,“J2EE重构”一章,“引入同步令牌”的重构手法,看完就明白了。
   
0 请登录后投票
最后更新时间:2004-08-25
firebody 写道
比如客户点击一个URL: delArticle.action?aritcleId=100
我后台的anction执行了这个删除之后,再重定向到一个url:
listAllArticles.action  给客户看结果!
然而,客户在看listAllArticles.action时,习惯性的点击了刷新,因为delArticle.action?articleId=100这个url还保留在IE地址栏中,结果,刷新就重复发送了这个delArticle.action,导致后台返回客户出错信息。然而,客户的本意是刷新查看listAllArticles.action!
对于这种重定向的问题,大家是怎么解决IE端的地址栏更新问题呢??


删除以后转向一个显示删除成功的页面吧。
或者是包含meta refresh 标记的页面。
也就是最终目的要让浏览器转向,不能在服务器端转向。
   
0 请登录后投票
最后更新时间:2004-08-25
谢谢
gigix ,tiyi
问这个简单问题该打!!不过我真的不懂怎么解决阿!呵呵,本来想少做一些页面,看来用tiyi的解决问题!
gigix 说得同步令牌,可能实在需等待长时间的操作中客户多次点击的问题吧!这个我这里还没有遇上!
   
0 请登录后投票
最后更新时间:2004-08-26
tiyi 写道
删除以后转向一个显示删除成功的页面吧。
或者是包含meta refresh 标记的页面。
也就是最终目的要让浏览器转向,不能在服务器端转向。

可以在服务器转向的!而且这样做最直接!

如果你是在用Struts的话,在Action里这样写就可以了:[code:1]return new ActionForward("newAction.do", true);[/code:1]
其它框架一般也都会提供类似功能的接口。

服务器端转向有forward和redirect两种方式,前者是firebody目前的效果,后者就是他想要的效果
   
0 请登录后投票
最后更新时间:2004-08-26
引用

删除以后转向一个显示删除成功的页面吧。
或者是包含meta refresh 标记的页面。
也就是最终目的要让浏览器转向,不能在服务器端转向


很多用户需求是要求删除成功以后直接返回原来的页面的,如果没有这个成功删除的页面,是不是就无法解决问题了?

另外,不清楚楼下说的在服务器转向是什么意思?
   
0 请登录后投票
最后更新时间:2004-08-26
downpour 写道
引用

删除以后转向一个显示删除成功的页面吧。
或者是包含meta refresh 标记的页面。
也就是最终目的要让浏览器转向,不能在服务器端转向


很多用户需求是要求删除成功以后直接返回原来的页面的,如果没有这个成功删除的页面,是不是就无法解决问题了?

另外,不清楚楼下说的在服务器转向是什么意思?


servlet的转向方式有两种,一种是内部转向,即直接将请求发送到下一个servlet(action)
。还有一种是用response header location(sendRedirect)。前者是浏览器不知的情况,所以在楼主实例中,浏览器发送请求给delAction,delAction返回的却是listAction的输出(服务器内部转向)。如果用sendRedirect(重定向),那么浏览器是知道服务器发回的实际listAction地址,从而再次发送请求去获取listAction的输出。不知有没有说清除。知道HTTP协议就明白二者的不同了。用meta标签也是一种明确告知浏览器当前访问地址是什么的方式。总而言之,就是让浏览器明白,按下刷新的时候,浏览器向正确的地址发请求。

muziq已经说得很准确了,不好意思我又叽叽歪歪啦
   
0 请登录后投票
最后更新时间:2004-08-29
前段时间和几个作c/s的程序员在一起的时候,他们要求的做法是页面显示的值在session中,对数据库操作收到结果后对应的操作session,这样子页面显示的数据可以得到控制,“用户在操作的时候就不会迷惘”,引用大我10岁的程序员的话
   
0 请登录后投票
最后更新时间:2004-08-29
马伟 写道
这样子页面显示的数据可以得到控制,“用户在操作的时候就不会迷惘”


不是很明白, 能够详细说说吗?

谢了!
   
0 请登录后投票
最后更新时间:2004-08-29
马伟 写道
前段时间和几个作c/s的程序员在一起的时候,他们要求的做法是页面显示的值在session中,对数据库操作收到结果后对应的操作session,这样子页面显示的数据可以得到控制,“用户在操作的时候就不会迷惘”,引用大我10岁的程序员的话


大量运用SESSION,太浪费资源了. 还不如自已做个控制器,或者用STRUTS的更好!
   
1 请登录后投票
论坛首页 Java版 Webwork

跳转论坛:
JavaEye推荐