4

我已经在客户端和服务器之间进行了通信。过程很简单:

  1. 我正在向在文件系统中生成 pdf 的控制器发出 AJAX POST 请求
  2. 上述请求成功后,将发出表单 GET 请求以取回 pdf,并打开标准浏览器“保存或打开”对话框

我有一个两步过程的原因是因为我需要在生成 pdf 时有一个进度条。

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

这种方法的问题是 IE7 和 IE8 会弹出一个恼人的通知栏,通知用户下载内容很危险,我不希望这样。

所以:

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

任何帮助表示赞赏。

4

1 回答 1

3

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

但是我以前见过这个(并且承认我这样做过),除了一些内疚之外,它确实起到了作用

  • 用户单击指向生成 PDF 的 servlet 的链接,然后等待(应应用超时设置)直到它准备好...(Content-Disposition 标头等...),就像常规下载一样

  • servlet 将在生成 PDF 时报告共享会话变量的进度

  • 对服务器的 AJAX 调用将从会话变量中读取进度并向用户显示

  • PDF 完成后,浏览器只会下载它(可能存在请求超时风险)

这里的主要问题是使用请求线程作为工作线程并阻止它,这可能会给这个答案带来一些反对意见......

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

于 2012-05-10T14:51:05.090 回答