extjs 导出Excel 解决方法 extjs export excel 信息 消息

由于ExtJs的提交请求都是异步的,返回内容都是json等格式,

所以不能用ExtJs的操作去请求导出操作。

 

方法1:

url重定位,window.location.href或者window.open等去请求操作,

前台请求window.location.href="../exportExcel.action",

struts配置:

<result name="exportExcel" type="stream">
 <param name="ContentType">application/vnd.ms-excel</param>
 <param name="inputName">file</param>
 <param name="contentDisposition">attachment;filename=${exportfilename}</param> 
 <param name="bufferSize">4096</param>
</result>

后台返回文件的流file,和对应的文件名exportfilename

正常时没有任何问题

这样后台有异常或者导出内容异常等,

画面重定位找不到,画面就会崩掉。

 

方法2:

使用传统页面提交方式,Ext页面中html属性里放一个form和一个iframe,如下

<form id="exportform" target="exportframe"></form><iframe id="exportframe" name="exportframe" border="0" frameborder="0" width="0" height="0"></iframe>

form提交时请求导出文件,

后台如下:

response.addHeader("Content-Type", "application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;fileName=\"" + fileName + ".xls\"");

workbook.write(response.getOutputStream());

catch(FileNotFoundException e){
 e.printStackTrace();
 response.getWriter().write("<Script language='javascript'>alert('MSG0009');</Script>");
}

这样正常时也不用打开新的页面去下载,直接利用隐藏的iframe实现,效果比较好。

异常时,可以利用response执行前台脚本,提示各种错误信息,可以交互。

而且这个调用不需要struts配置等。

 

搞了好久才出来这个方法,希望对大家有用。

你可能感兴趣的:(ext,Excel,ExtJs,导出)