如何在Excel导出时加一个提示框

如何在Excel导出时加一个提示框

 (1)  问题描述

      Excel导出的时候由于数据量较大,加上项目用的数据库和外网不在同一个局域网内,导致导出数据的时候速度很慢。最后客户要求,在导出的时候加上一个提示框,当导出完毕后,提示框自动消失。

       这个问题比较棘手,因为导出数据的时候Action给前台返回的是流而不是文本,所以页面不会跳转,无论你Action里有没有配置跳转的页面地址,都不会跳转。

(2) 解决方案

      步骤一: 在js中设置一个标志位,Excel导出的Action提交前给一个默认的初始值“0”,显 

                        示提示框。

      步骤二: 当Excel导出数据后把标志位设置为“1”,该标志位为Action的成员变量

      步骤三: 另外在导出Excel方法所在的Action中增加一个方法,改方法的作用是查看标志位

                        的值有没有改变。

     步骤四: 当Excel导出的form表单提交后,用ajax每3秒向请求查看标志位的Action

     步骤五: 发现标志位的值发生改变后,ajax可以接受到成功的信息,最后把提示框隐藏。

       

(3) 代码

    前台页面代码:

var tIfRun = '${ifRun}';
function exportExcel(){  
    var exportTtype = $('#select option:selected') .val();;
    var type0 = document.getElementById("type0").value;
    var type1 = document.getElementById("type1").value;
    var type2 = document.getElementById("type2").value;
//显示提示框
    document.getElementById("tc").style.display="block";
    document.getElementById("bg").style.display="block";  
    document.getElementById("myForm").submit();
    tIfRun='1';
}
function timeCallBack() {
	if(tIfRun == '1') {
		htmlobj = $.ajax({url:"<%=basePath%>timeCallBack.action", async:false, type:"POST"});
		if(htmlobj.responseText == 'ok') {
	  //隐藏提示框
                   document.getElementById("tc").style.display ="none";
			document.getElementById("bg").style.display ="none";
			tIfRun = '';
		}
	}
}

 后台:

 

public void timeCallBack() throws IOException {
    HttpServletResponse httpResponse = ServletActionContext.getResponse();
     httpResponse.setContentType("text/xml");
  httpResponse.setHeader("Content-Type", "text/xml; charset=UTF-8");
  httpResponse.setHeader("Cache-Control", "no-cache, must-revalidate");
  PrintWriter out = httpResponse.getWriter(); // 定义一个输出流
  if (!"1".equals(LockIndex.getInstance().getIndexRunFlag())) {
   out.print("ok");
  }

 注意:timeCallBack() 方法和导出的方法都是放在同一个ExportAction.ava文件中的,标志位为

             ExportAction.ava的成员变量。当然这个程序也可以把提示框改成一个滚动条的样式。

(4)  总结这个程序的精髓之处在于利用了ajax请求了和导出的方法在同一个Action类里的方法,

       从而可以根据标志来判断数据有没有导出。

你可能感兴趣的:(Excel)