【问题标题】:How to display message on new tab while downloading document in GWT在 GWT 中下载文档时如何在新选项卡上显示消息
【发布时间】:2017-10-24 07:25:31
【问题描述】:

我正在 GWT 中创建一个报告下载表单。下载报告文档需要 2-3 分钟,我在新选项卡中打开它,但新选项卡是空白的,正在等待服务器响应。现在我想显示一些自定义消息,例如“文件正在下载,不要关闭此选项卡”。如何在 GWT 中做到这一点?我当前的代码如下所示,打开带有 URL 的空白页面..

FormPanel m_downloadForm = new FormPanel();
m_downloadForm.setMethod(FormPanel.METHOD_POST);
m_downloadForm.setAction(url);
m_downloadForm.getElement().<FormElement>cast().setTarget("_blank");
Hidden h = new Hidden();
h.setName("OkBtn"    );
h.setID(  "OkBtn"    );
h.setValue("Create Report");
m_downloadForm.add(h);
m_rootContent.add(m_downloadForm);

此代码打开新标签页,但没有成功显示任何消息,并且正在下载文档。我想在新标签上显示一些消息。

【问题讨论】:

  • 我只想在请求和响应之间的新选项卡上显示自定义消息而不是空白。如何实现?

标签: javascript java html ajax gwt


【解决方案1】:

您需要使用另一个线程进行下载。 您的程序当前只使用一个线程。这意味着您的程序正在按顺序运行。它需要在执行任何其他操作之前完成正在执行的所有操作。 拥有多个线程会使任务并行执行。

【讨论】:

  • 在浏览器上打开新标签与产生负责接收响应的新线程相同。我只想在请求和响应之间的新选项卡上显示消息。如何实现?
  • 浏览器没有可以与之交互的线程,至少不像您建议的那样。相反,IO 已经在线程外完成,您可以使用回调或事件处理程序对其进行响应。
【解决方案2】:

您正在使用本机浏览器方法打开报告:通过表单将 url 发送到新的浏览器窗口。从那时起,您将无法再控制显示的内容以及如何管理用户的期望。

您可以做的是创建一个包含 Frame 的小型 GWT 包装页面。在该框架内,您将加载用户请求的报告。包装器 GWT 页面显示一个信息屏幕,通知用户他们需要耐心等待。然后它检查报告是否/何时实际完成下载/渲染,一旦出现这种情况,就会删除信息屏幕,以便框架实际上是全屏的。

  1. 首先,您当然需要创建一个包装器。这将是一个带有 GWT 模块加载器的小型新 html 页面。 GWT 模块创建一个面板来包含信息消息和 iFrame。

  2. 您需要某种方法来获取用户请求传递给 GWT 包装器页面的报告。您可以使用 url 查询参数将请求的报告传递给您的包装器。像这样的东西: http://www.yourdomain.com/reportwaitscreenapp.html?reporttoload=http://www.yourreportserver.com/repot5.xml\amp&;parameter1=5

  3. 然后在reportwaitscreenapp 中找出reporttoload 使用的是什么Window.Location。并将其传递给 Frame 进行加载。

  4. 然后创建一个框架(或 PDF 对象、图像等),您可以在其中加载报告。

  5. 检查状态。这将很困难,并且取决于您尝试加载的对象类型以及您使用的浏览器。您可以尝试 Frame.onLoad() 方法,但我读到在某些情况下它会立即触发并且不会等到下载完成。

您是否正在尝试加载 PDF 并且想要浏览器的 pdf 查看器?还是常规 html 并使用 (i)Frame?这个page 讨论了如何检查框架是否已完成加载/渲染。

  1. 删除您的请稍候消息。

这可能需要反复试验。

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多