【发布时间】: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.getFileDownloadResource或FileDownloader.handleConnectorRequest并在那里有你的流生成逻辑java public Resource getFileDownloadResource() { setFileDownloadResource(getReportsStream()); return super.getFileDownloadResource() }
标签: java google-chrome internet-explorer firefox vaadin