我试过在 Vaadin7 中使用新的 FileDownloader。不幸的是,它需要一个 AbstractComponent 用于“扩展”组件(它监听点击的地方)
有没有办法将它与组合框项目一起使用?因为它们不是 AbstractComponents,因此不适合“扩展”方法。
Vaadin 论坛对此进行了很多讨论,现在没有使用 FileDownloader 或类似功能的 BrowserWindowOpener 的方案。它们都只适用于 AbstractComponents,因此不适用于 Table 和 Tree 的 Action 处理程序,或 Table 上的行单击处理程序,或 Menu 中的 MenuItem 等。这同样适用于各种选择框中的选定元素。
您必须使用常规的单击/值更改侦听器恢复到弹出窗口样式(因此浏览器需要允许弹出窗口才能工作),创建资源并将其传递给已弃用但仍然有效的 Page.getCurrent()。打开(资源...)方法。
这是我的解决方法。它对我来说就像一个魅力。希望它会帮助你。此示例适用于 MenuItem,但您可以针对 ComboBox 进行修改。
创建一个按钮并通过 Css 隐藏它(不是通过代码:button.setInvisible(false))
final Button downloadInvisibleButton = new Button();
downloadInvisibleButton.setId("DownloadButtonId");
downloadInvisibleButton.addStyleName("InvisibleButton");
在您的主题中,添加此规则以隐藏downloadInvisibleButton
:
.InvisibleButton {
display: none;
}
当用户点击 menuItem: 时,扩展fileDownloader
至,然后通过 JavaScriptdownloadInvisibleButton
模拟点击。downloadInvisibleButton
menuBar.addItem("Download", new MenuBar.Command() {
@Override
public void menuSelected(MenuBar.MenuItem selectedItem) {
FileDownloader fileDownloader = new FileDownloader(...);
fileDownloader.extend(downloadInvisibleButton);
//Simulate the click on downloadInvisibleButton by JavaScript
Page.getCurrent().getJavaScript()
.execute("document.getElementById('DownloadButtonId').click();");
}
});