如何在GWT中下载文档时在新选项卡上显示消息

时间:2017-10-24 07:25:31

标签: javascript java html ajax gwt

我正在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);

此代码打开新选项卡,没有成功的消息,正在下载文档。我想在新标签上显示一些消息。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

  1. 首先,您需要创建一个包装器。这将是一个带有GWT模块加载器的小型新html页面。 GWT模块创建一个面板以包含info-message和iFrame。

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

  3. 然后在reportwaitscreenapp中找出reporttoload正在使用Window.Location的内容。并将其传递给Frame加载。

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

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

  6. 您是否尝试加载PDF并希望浏览器使用pdf查看器?或者常规html并使用(i)Frame?这个page讨论了如何检查Frame是否完成加载/渲染。

    1. 删除您的等待消息。
    2. 这可能会有很多反复试验。