显示throbber图像,同时等待下载准备在Tapestry中

时间:2014-02-13 13:31:19

标签: java javascript download tapestry throbber

我的页面上有一个表单,生成一个大型PDF文件(最多可能需要20秒)。 有没有办法在下载文件创建时显示throbber并在下载提示出现时隐藏它?

我做了一些检查,最初认为我可以使用渐进式显示,但认为这不是它的用途。

我想我可以附加一个JS功能,当单击“下载”按钮时会触发显示我的悸动,但我不确定如何在下载窗口出现时隐藏它。

在Tapestry中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

HTTP存在限制,因为您无法返回包含PDF和一些json的单个响应。

你能做的是:

  1. 提交表单(具有区域参数)
  2. 启动生成PDF的异步作业
  3. 立即从提交中返回(在生成PDF之前)
  4. 启动一些javascript,轮询作业直至完成
  5. 作业完成后,通过javascript(document.location.href = /path/to/pdf
  6. 下载PDF

    您可以查看progresslink以获取轮询异步任务的示例。您需要将PDF存储在异步任务(即会话,数据库或文件系统)中。

答案 1 :(得分:1)

可能更好的解决方案是不提交表格。您可以使用javascript构建GET网址并使用iframe。

例如:

<form>
    <input id="someText" />
    <button onclick="downloadPdf()">Click Me</button>
</form>

<script>
   function downloadPdf() {
      var url = "/path/to/pdf?someText=" + encodeURIComponent($("#someText").val());
      startThrobber();
      $('<iframe src="' + url + '" onLoad="stopThrobbber()">').appendTo('body');
   }
</script>