0

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

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

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

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

4

2 回答 2

1

HTTP 有一个限制,即您不能返回包含 PDF 和一些 json 的单个响应。

你可以做的是:

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

您可以查看进度链接以获取轮询异步任务的示例。您需要将 PDF 存储在异步任务中的某个位置(即会话、数据库或文件系统)。

于 2014-02-13T13:52:08.327 回答
1

可能更好的解决方案是不提交表单。您可以使用 javascript 来构造 GET url 并使用 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>
于 2014-02-13T13:57:07.200 回答