论坛首页 Java企业应用论坛

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

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

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

如果你是在用Struts的话,在Action里这样写就可以了:
return new ActionForward("newAction.do", true);;

其它框架一般也都会提供类似功能的接口。

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

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


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

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

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


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

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


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

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


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

谢了!
0 请登录后投票
   发表时间:2004-08-29  
看来你是用Webwork的,你可以这样做
            <result name="success" type="redirect">article!input.action</result>
            <result name="input" type="dispatcher">article.jsp</result>


当然,前提是在一个相对比较靠根(ActionSupport)的位置实现

	public String input(); {
		return "input";
	}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics