excel文件导出之前的等待提示信息

前言

如题,最近也是遇到了一个项目里有导出数据到excel的功能,因为数据量大以及网络原因,经常点击导出按钮后迟迟不响应,对等待的人很不友好,所以建议加一个等待提示框。(本来想加个进度条,奈何有问题一直解决不掉,赶进度只好换成简单的提示框了QAQ)

温馨提示:项目是ssh,所以以下实现基于此。若springboot则根据自己情况替换。

实现

先上前台代码:

exportUrl: apiPrefix + "!excelExport.action?timeZone=",
isExportUrl: apiPrefix + "!isExport.action",

...

/**
@param isExportUrl   是否导出标志的action方法路径
@param exportExcelUrl 导出excel的action方法路径
*/
function do_export(isExportUrl, exportExcelUrl) {
    var index = top.layer.alert("数据正在导出中,请耐心等待!", {icon: 16,closeBtn:0,btn:[]});
    let d = new Date();
    let utc = d.getTimezoneOffset();
    let da = 8 * 60 - (-utc);
    location.href = exportExcelUrl + da;
    // 定时器判断导出进度是否完成
    var timer = setInterval(function(){//每隔1秒进行调用该函数
        $.ajax({
            url:isExportUrl,
            success: function(data){
                console.log(data);
                if(data === "true"){//如果返回的数据是已经成功了说明表格已经加载完成了
                    layer.closeAll();//关闭所有的提示框
                    //关闭弹出框
                    top.layer.close(index);
                    clearInterval(timer);//清除这个方法
                }
            },
            error:function(e){
                console.log("访问失败");
                console.log(e.responseText);
            }
        });
    }, 1000);
}

后端代码:

父类BaseAction中:

// 新增获取session对象
	public HttpSession getSession() {
		return ServletActionContext.getRequest().getSession();
	}

	// 成功
	public void writeWithUtf8(String str) {
		try {
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setContentType("text/html");
			response.setCharacterEncoding("utf-8");
			this.write(str);
		} catch (Exception e) {
			log.error(e,e);
		}
	}
	// 输出响应
	public void write(String str) throws Exception {
		HttpServletResponse response = this.getResponse();
		response.getWriter().write(str);
		response.getWriter().flush();
		response.getWriter().close();
	}

——子类xxInfoAction里isExport方法——:

// 新增一个通用获取是否导出完毕方法,session中存入一个exportedFlag标志
    public void isExport() {
        Object exportedFlag = super.getSession().getAttribute("exportedFlag");
        if (exportedFlag == null) {
            logger.info("已经导出完毕");
            super.writeWithUtf8("true");
        }else {
            // logger.info("还未导完");
            super.writeWithUtf8("false");
        }
    }

——子类xxInfoAction里excelExport方法——:

public String excelExport() {
        // 导出前设置session中exportedFlag任意值,导出后清空
        super.getSession().setAttribute("exportedFlag", "false");

        HSSFWorkbook workbook = new HSSFWorkbook();
        try {
           ...//导出完毕了
          super.getSession().removeAttribute("exportedFlag");
		  return filename;
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e);
        } finally {
            try {
                workbook.close();
            } catch (Exception e) {
                log.error(e);
            }
        }

        return null;
    }

附:springboot里进度条实现:实现文件导出,写入等进度条实时显示


over~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值