2012-05-10 66 views
4

我已经在客户端和服务器之间进行了通信。过程很简单:如何在生成下载的PDF文件时显示进度条,而不需要IE“下载”警告

  1. 我在做一个AJAX POST请求到一个控制器,它在文件系统中
  2. 在上述请求的形式GET请求以获取PDF回来的成功生成PDF格式并打开标准浏览器“保存或打开”对话框

我有两个步骤的过程的原因是因为我需要有一个进度栏,而生成pdf。

第二个请求是表单提交而不是AJAX请求的一部分的原因是因为我无法获得标准浏览器的“保存或打开”对话框。

这种方法的问题是,IE8 & IE8弹出一个恼人的通知栏,通知用户下载内容是危险的,我不想这样做。

所以:

  1. 我所需要的进度条。
  2. 如果我去一个AJAX请求,只需要一种方法来弹出“保存或打开”对话框。
  3. 如果我为表单提交GET提交,我需要知道何时生成文件以停止进度条,如服务器和客户端之间的共享标志。

任何帮助表示赞赏。

回答

3

一个可能的(有点反模式)的解决方法是这样的,但它不是一个伟大的设计可能

不过,我已经看到了这一点(和承认我这样做)之前,除有些愧疚,它做

  • 用户点击去生成PDF和会只是等待(超时设置应适用),直到它准备在servlet链接的伎俩......(内容处置头等等)就像常规下载

  • 在生成PDF

  • 一个AJAX调用服务器将从会话变量读取进度,并显示给用户

  • 当PDF完成该servlet将报告上的共享会话变量的进展,浏览器将只需要下载它(请求超时的风险也许)

这里的主要问题是使用请求线程的工作线程,并阻止它,这可能会给这个回答几个downvotes的...

我并不熟悉Message Driven Beans,但这是另一种可能更好的解决方案。

+0

我想到了这个解决方案。我也设法使用cookie来处理它。当pdf准备就绪时,服务器会向用户的机器设置一个cookie,并且javascript函数会检查每500ms左右是否存在该cookie,并隐藏进度栏。 这些解决方案将工作,但在我看来并不是最清洁的解决方案。 – Sfairas

+0

不仅仅是赞同,但在我看来,如果它对用户有用,我不在乎它是如何实现的(只要它没有错误,将来会崩溃,或者难以维护),工作软件就是只测量进步... –

+0

谢谢伊兰。将不得不做更多的研究,并决定我是否采用会议方式。 – Sfairas