使用ajax下载生成的excel文件

时间:2013-03-12 11:59:28

标签: java ajax excel struts2 download

我正在使用struts2框架开发一个应用程序。当用户提供日期范围时,我需要准备报告excel文件并在下载弹出窗口中显示。我能够创建exo的io流,但我没有得到如何使用ajax打开该弹出窗口。

我正在动态生成文件并返回流。因此无法提供文件路径。我希望ajax调用显示一些消息,如"Please wait.."。因为文件生成需要更多时间,看起来链接不起作用..

3 个答案:

答案 0 :(得分:1)

没有关于下载文件的Ajax。

您的请求可以是ajax请求,但只需提供生成的文件路径,浏览器就会进行下载。

答案 1 :(得分:1)

无需执行任何AJAX次来电。

您只需将byte[]作为Struts2 Stream result返回, 使用ContentDisposition: attachment;(而不是ContentDisposition: inline进行配置,尝试在浏览器中打开它,而不是询问下载或打开桌面应用程序。)

要通知用户正在进行某些操作,请求已发送且系统未冻结,您需要Loading OVERLAY

叠加层是放置在页面上的元素,通常具有部分透明背景,动画图像表示“正在加载...”,以及模态行为(它不会关闭)直到页面被更改,它将阻止相同请求的双重帖子,如双击等...)。

当然,如果您打开附件,页面将不会更改,那么您需要截取下载结束并自行关闭叠加层,或者给用户一个关闭它的按钮。

要拦截它,您可以尝试Struts2 Execute and Wait Interceptor

如果您想创建自定义叠加层,可以使用ajaxload.info Generator生成加载图片。

如果您不想重新发明轮子,可以查看现有的叠加层,例如来自jQuery TOOLS的叠加层。

答案 2 :(得分:0)

关于ajax的成功方法,不要返回流,而是将文件保存在服务器上,然后打开弹出的地址,返回正确的文件。但是在某些浏览器中可能会阻止弹出窗口,因此您需要为您的站点(本地主机或其他URL)允许弹出窗口