我正在使用struts2框架开发一个应用程序。当用户提供日期范围时,我需要准备报告excel文件并在下载弹出窗口中显示。我能够创建excel的io流,但我不知道如何使用ajax打开该弹出窗口。
我正在动态生成文件并返回流。因此无法给出文件路径。我希望ajax调用显示一些消息,如“请稍候…”
。因为文件生成需要更多时间,看起来链接不起作用…
下载文件与Ajax无关。
您的请求可以是ajax请求,但只需给出生成的文件路径,浏览器就会进行下载。
无需执行任何AJAX
调用。
您只需要将byte[]
作为Struts2Stream
结果返回,并配置了ContentDispo:附件;
(而不是ContentDispospos: inline
,这将尝试在浏览器中打开它,而不是询问下载或使用桌面应用程序打开)。
要通知用户正在发生某事、请求已发送并且系统未冻结,您需要Loding OVERLAY
。
Overlay是放置在您的页面上的元素,通常具有部分透明的背景、显示“加载中…”的动画图像和模态行为(它不会关闭,直到页面更改,它将防止重复发布相同的请求,如双击等…)。
当然,如果你打开一个附件,页面不会改变,那么你需要拦截下载结束并自己关闭覆盖层,或者给用户一个按钮来关闭它。
要拦截它,您可以尝试Struts2执行和等待拦截器
。
如果要创建自定义覆盖,可以使用ajaxload.infoGenerator
生成加载图像。
如果您不想重新发明轮子,您可以查看现有的覆盖层,例如jQuery TOOLS
中的覆盖层。
在ajax的成功方法上,不要返回流,而是将文件保存在服务器上,并打开一个带有返回正确文件的操作地址的弹出窗口。但是弹出窗口可能会在某些浏览器中被阻止,因此您需要允许您的站点(本地主机或其他URL)