注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Javado做Java

学习的点点滴滴http://blog.csdn.net/guorujian

 
 
 

日志

 
 
关于我

东北人! 狮子的獠牙、光速拳! 我很佩服163的办事认真,故乡一栏竟然能精确到乡,而且我们乡合并才不久。厉害!永远支持网易!

网易考拉推荐

烦人的"出现不重新发送信息,则无法刷新网页"  

2008-08-22 17:27:14|  分类: 总结篇 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

弹出窗口刷新它的父页面时。出现不重新发送信息,则无法刷新网页

以下范例为演示解决办法使用PHP实现全当交流,没有什么技术难度一点烦人的小技巧,权当与朋友交流。

在公共模块中新建函数

PHP:

<?
function requestParameter(){
?$fromstr="<form name='request' method='POST'<";
?$requestKeys=array_keys($_REQUEST);
?$requestValues=array_values($_REQUEST);
?for($i=0;$i<sizeof($_REQUEST);$i++){
??$fromstr.="<input name='$requestKeys[$i]' value='$requestValues[$i]' type='hidden'<";
?}
?$fromstr.="</form<<script<function reload(){request.submit()}</script<";
?return $fromstr;
}
?<

JAVA:

public class UtilTool {

??? public static Map getParameterMap(HttpServletRequest request) {
??????? Map paramMap = new LinkedMap();
??????? String pathInfoStr = request.getPathInfo();

??????? if (pathInfoStr != null && pathInfoStr.length() < 0) {
??????????? if (!pathInfoStr.endsWith("/")) pathInfoStr += "/";

??????????? int current = pathInfoStr.indexOf('/');
??????????? int last = current;
??????????? while ((current = pathInfoStr.indexOf('/', last + 1)) != -1) {
??????????????? String element = pathInfoStr.substring(last + 1, current);
??????????????? last = current;
??????????????? if (element.charAt(0) == '~' && element.indexOf('=') < -1) {
??????????????????? String name = element.substring(1, element.indexOf('='));
??????????????????? String value = element.substring(element.indexOf('=') + 1);
??????????????????? paramMap.put(name, value);
??????????????? }
??????????? }
??????? }

??????? java.util.Enumeration e = request.getParameterNames();
??????? while (e.hasMoreElements()) {
??????????? String name = (String) e.nextElement();
??????????? paramMap.put(name, request.getParameter(name));
??????? }

??????? if (paramMap.size() == 0) {
??????????? Map multiPartMap = (Map) request.getAttribute("multiPartMap");
??????????? if (multiPartMap != null && multiPartMap.size() < 0) {
??????????????? paramMap.putAll(multiPartMap);
??????????? }
??????? }
??????? return paramMap;
??? }


? public static String requestParameter(HttpServletRequest request){
?? String fromstr="<form name='request' method='POST'<";
?? Enumeration requestKeys = request.getParameterNames();
?? Map requestValues=UtilTool.getParameterMap(request);
?? String rkey = null;
?? for(;requestKeys.hasMoreElements();){
??? rkey = (String) requestKeys.nextElement();
??? fromstr+="<input name='"+rkey+"' value='"+requestValues.get(rkey)+"' type='hidden'<";
?? }
?? fromstr+="</form<<script<function reload(){request.submit()}</script<";
?? return fromstr;
?}
}

在模版页面中调用此函数并输出返回的字符串。

PHP:

<?=requestParameter();?<

JAVA:

<%=UtilTool.requestParameter(request)%<

这样当需要调用弹出窗口并刷新当前页时如:
针对当前页的刷新

window.location.reload();
改为
reload();

原理:

??? 很多WEB程序员比如我,比较喜欢让地址栏保持清爽的状态,切换页面地址或进行列表翻页处理的时候,尽量都用POST方式提交数据,但这样就引发了一个怪异的问题,就是当弹出窗口关闭后需要同时刷新父页面时IE就会出现"不重新发送信息,则无法刷新网页。"的警告,使得本来不错的想法不能得到完美实现,迫不得已,只能改用GET提交方式,比较郁闷得去做字符串连接操作。

??? IE认为POST提交的信息应该是一次性的,当提POST交后刷新页面的时候(如按F5或调用window.location.reload();时)IE将会认为这是重复提交(所谓重复提交:IE对其的理解就是把提交过的表单用刷新的办法在提交一次。),所以需要用户进行确认才能允许刷新页面,虽然是好心,解决办法却比较笨,招得怨声四起。

??? 其实,在测试中可以发现,如果不用window.location.reload();提交刷新,而直接提交一个表单,那怕这个表单已经重复提交了上万次,IE也不会拒绝(还真是好骗)。

??? 那么解决办法就来了,既然提交表单不会拒绝,那么我们就做个表单刷新用,首先我们要找到刷新页面时到底有什么东西要被重复提交,这就涉及到一个服务器对象REQUEST,暂且这样称呼,做WEB开发的人对它都非常熟悉,不管是POST方式还是GET方式甚至是混合提交的方式提交的数据,都存储在这个对象中,那么把它的数据项拿出来做成一个个隐藏域放在表单中,ACTION设为_SELF并执行提交,那么效果将与按F5然后点那个倒霉的“重试”效果是一样的。

?? 以上的例子中我首先声明了一个方法requestParameter(),将其放在一个公共页面中,然后把调用
<?=requestParameter();?<
也放在公共页面中,将返回一个包含REQUEST对象中的所有项目的隐藏表单,并附带一个提交的JAVASCRIPT方法reload();,这样,只要在应用页面中用到弹出窗口刷新父窗口的调用时,调用reload();即可。

?? 其他的语言如ASP、JSP等处理办法也是相同的,用PHP做例子的好处是代码量最少呵呵,至于这种方法会有什么副作用,我还没有发现,欢迎有朋友给与指正。

本文来自:http://xdaidai.blog.sohu.com/42333226.html

最新解决办法:

如果上述问题还不能解决这个烦人的提示,建议在链接之间,添加包含iframe的jsp页面,然后利用刷新该jsp页面来实现刷新的目的。

~~~

  评论这张
 
阅读(1080)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017