【问题标题】:FileDownloader - different behavioral which depend on browserFileDownloader - 取决于浏览器的不同行为
【发布时间】:2017-12-13 13:37:13
【问题描述】:

在开始时,我尝试描述上下文。我有一个按钮,点击返回文件,其中包含相关日期的数据。单击按钮时,我对数据库进行查询(日期从到到)并将数据解析为正确的格式,并以StreamResource 的形式返回到FileDownloader。所有类都来自Vaadin 包。

    Button btExport = new Button("Export");
    FileDownloader fileDownloader = new FileDownloader(getReportsStream());
    fileDownloader.extend(btExport);
    //update resource to download on click 
    btExport.addClickListener(event -> {
        fileDownloader.setFileDownloadResource(getReportsStream());
    });

在 Chrome 和 IE 浏览器中一切正常。在 Mozilla Firefox 中不是。在 Firefox 浏览器中,始终返回旧的 StreamResource 对象。总是返回相同的文件,它看起来像 Firefox 从缓存中获取的,因为在日志中我没有找到 Firefox 的事件点击,任何操作。在 Chrome 和 IE 中存在日志。

所有浏览器都是最新的。 Vaadin 版本:7.7.6

你知道为什么会这样吗?或者也许我可以用不同的方式来实现下载文件?

编辑///

我找到了解决方案,但我不知道它是否是暂时的。重新安装浏览器后,不再出现奇怪的行为。如果几天后一切正常,我将把它作为解决方案。

【问题讨论】:

  • 你不需要给你的按钮添加点击监听,fileDownloader.extend(btExport)就足够了。
  • @Chris M 当StreamResource 的数据没有动态更改(没有刷新页面)时就足够了。就我而言,正如我所写,数据会根据所选日期进行更改,因此我必须在单击按钮时输入“新鲜”数据为StreamResource
  • 服务器端点击监听器将在下载开始后运行,而不是之前。我知道的最好的解决方法是覆盖FileDownloader.getFileDownloadResourceFileDownloader.handleConnectorRequest 并在那里有你的流生成逻辑java public Resource getFileDownloadResource() { setFileDownloadResource(getReportsStream()); return super.getFileDownloadResource() }

标签: java google-chrome internet-explorer firefox vaadin


【解决方案1】:

在安装 Firefox 57 之后,我首先在 Firefox 49 上进行测试,但没有任何变化。只有当我清理缓存并且每个都仍然存在时,它看起来才有效。我在另一台计算机上检查并在 57 版上工作,在 49 版上没有工作。

结论是要有最新的浏览器,一定要卸载旧版本的浏览器并清理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多