• Struts2 利用AJAX 导出大数据设置遮罩层


    Struts2 利用AJAX 导出大数据设置遮罩层

    需求背景:

    每次我们导出excel的时候 ,如果数据量很大,导出花费的时间会很长,页面却有没人任何反应,这个时候用户会认为系统有问题,要么关了页面,要么狂点导出。感知太差了~甚至用户误操作会导致服务器崩溃。
    所以我么我们需要通过进度条方式告知客户导出的进度。
    通过在导出过程中循环请求后台确认时候导出完毕来控制遮罩层在某个时候关闭。

    解决办法:

    之前反复用了N种方式都没有解决类似问题,

    1、iframe 方式 最终拜拜

    2、ajax 方式  ajax 无法弹出download下载流框 拜拜 

    重点来了

    思路!
    1、JS 设置定时器 以1s 的访问去请求Action 

    2、Action 设置一个检测session 是否有效的方法 

    3、导出动作

    // show遮罩层
                    parent.Q.mask('数据正在导出中... ');
                    // 检测后台session 是否有效 
                    var isExportUrl = parent.Q.URL +'/cr/isExport.action?_='+new Date().getTime();
                    location.href = parent.Q.URL +'/cr/exportCopyrightEnd.action?form.queryInfo.copyrightStatus=0&_='+new Date().getTime();
                }

    2、isExportAction()

      

     public void isExport()
        {
          // 获取session 判断导出是否结束 String exportFlag
    = (String)ActionUtil.getSession().getAttribute("exportFlag"); if (StringUtils.isEmpty(exportFlag)) { try { ActionUtil.str2response("success"); } catch (IOException e) { DEBUGGER.error("Failed to isExport", e); e.printStackTrace(); } } }

    3、

            // 在导出结束 删除session    
        ActionUtil.getSession().removeAttribute("exportFlag");

    4、页面JS 只需要设置timer 请求后台isExport() 即可

      通过setInterval 方法循环请求后台获取exportedFlag, 一旦后台返回success(导出完毕),则关闭遮罩层

      

     // 设置一个定时器 
                    var timer = setInterval(function(){
                        $.ajax({
                            url: isExportUrl,
                            type:'post',
                            success: function(data){
                                if(data ==='success'){
                                    clearInterval(timer);
                                    // 关闭遮罩层
                                    parent.Q.unmask();
                                }
                            },
                            error:function(e){
                                console.log(e.responseText);
                            }
                        }); 
                      }, 1000); //1s

      

      

  • 相关阅读:
    Java多线程简介
    Java同步简介
    java enum的用法详解
    Instrumentation(3)
    持久化类的三种实例状态
    依赖注入和控制反转
    事务的4个要素及其工作原理
    mysql创建表与索引
    SpringAOP所支持的AspectJ切点指示器
    使用Spring的命名空间p装配属性-摘自《Spring实战(第3版)》
  • 原文地址:https://www.cnblogs.com/XQiu/p/5576846.html
Copyright © 2020-2023  润新知