2

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

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

4

3 回答 3

1

There's nothing Ajax about downloading a file.

Your request can be an ajax request, but simply give the generated file path and the browser will do the downloading.

于 2013-03-12T12:02:15.750 回答
1

无需执行任何AJAX调用。

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

要通知用户正在发生的事情、请求已发送且系统未冻结,您需要一个Loading OVERLAY.

覆盖是放置在页面上的元素,通常具有部分透明的背景、显示“正在加载...”的动画图像和模态行为(在页面更改之前它不会关闭,它会阻止相同请求的双重发布,例如双击等...)。

当然如果你打开一个附件,页面是不会改变的,那么你需要自己截取下载结束并关闭覆盖,或者给用户一个按钮来关闭它。

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

如果要创建自定义叠加层,可以使用ajaxload.info Generator.

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

于 2013-03-12T15:30:41.387 回答
0

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

于 2013-03-12T12:04:11.543 回答