我正在使用struts2框架开发一个应用程序。当用户提供日期范围时,我需要准备报告excel文件并在下载弹出窗口中显示。我能够创建exo的io流,但我没有得到如何使用ajax打开该弹出窗口。
我正在动态生成文件并返回流。因此无法提供文件路径。我希望ajax调用显示一些消息,如"Please wait.."
。因为文件生成需要更多时间,看起来链接不起作用..
答案 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)允许弹出窗口