• Cannot create a session after the response has been committed的处理


    情景:在导出excel导出过程中前台提示“正在导出,请稍等...”,导出结束后提示信息自动消失。

    但导出结束后就报如上错误,不可能相应两次。

    解决:主要是判断导出结束的时间点,确认导出结束时间。通过cookie解决,设置cookie

     if(fileName.contains("日志数据")){
            Cookie status = new Cookie("exportStatus","success");
            status.setMaxAge(60000); //单位为秒
            response.addCookie(status);
       }

    如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。

    这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

    如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

    cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie

    cookie.setmaxage设置为-1时,代表关闭当前浏览器即失效。

    //获取cookie
    function
    getCookie(name){ var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)){ return unescape(arr[2]); }else{ return null; } } //删除cookie function delCookie(name){ var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null){ document.cookie= name + "="+cval+";expires="+exp.toGMTString(); } }

    在备份中添加定时器,每100ms执行一次

    var timeRequest;
          $("#btnExport").click(function(){
             top.$.jBox.confirm("确认要导出日志数据吗?","系统提示",function(v,h,f){
                 if(v=="ok"){
                      var currentTime = $("#currentTime").val();
                      var beginDate = $("#beginDate").val();
                      var endDate = $("#endDate").val();
                      $("#searchForm").attr("onsubmit","loading('正在导出数据,请稍等...');");
                      $("#searchForm").attr("action","${ctx}/sys/log/export?currentTime="+currentTime+"&beginDate="+beginDate+"&endDate="+endDate);
                      $("#searchForm").submit();
                      timeRequest = setInterval(refeshPage,100);
                    }
               });
                  top.$('.jbox-body .jbox-icon').css('top','55px');
           });
    refeshPage方法如下:
    function refeshPage(){
           var exportStatus = getCookie('exportStatus');
           if(exportStatus == "success"){   //获取cookie后去掉页面提示,重新提交后台获得日志列表
                clearInterval(timeRequest);  //清除定时器
                delCookie("exportStatus");   //删除cookie
                $("#searchForm").attr("action","${ctx}/sys/log/list");
                $("#searchForm").removeAttr("onsubmit");
                $("#searchForm").submit();
           }
     }

    没想到用cookie,办法同事想到的,记录一下

  • 相关阅读:
    Percona Toolkit安装、使用
    Mysql 5.6主从搭建
    AngularJs 抓狂系列索引
    AngularJs 抓狂之: $q promise 自动unwarp功能被禁用了
    AngularJs 的 好文章
    AngularJs 抓狂之:Angular的元素是驼峰命名法,但是HTML属性是用-分隔的,两者不一致!
    Ajax请求永远是304的解决方案
    Java 7 Pocket Guide 读书笔记
    MFC中获取App,MainFrame,Doc和View类等指针的方法
    Thrift实践:(一)安装 -- 未完待续
  • 原文地址:https://www.cnblogs.com/person008/p/9106243.html
Copyright © 2020-2023  润新知