我尝试在Vaadin7中使用新的FileDownloader。不幸的是,它需要一个AbstractComponent用于“extend”组件(它在哪里监听点击)
有没有办法将它与组合框项目一起使用?因为它们不是AbstractComponents,因此不适合“扩展”方法。
答案 0 :(得分:1)
Vaadin论坛已经讨论了很多,现在没有使用FileDownloader或类似功能的BrowserWindowOpener的方案。它们都只适用于AbstractComponents,因此不适用于Table和Tree的Action处理程序,Table上的行单击处理程序,Menu中的MenuItem等。这同样适用于各种选择框中的选定元素。
您必须使用常规的click / valuechange侦听器恢复弹出窗口样式(因此浏览器需要允许弹出窗口才能工作),创建资源并将其传递给已弃用但仍在工作的Page.getCurrent ()。open(Resource ...)方法。
答案 1 :(得分:1)
这是我的解决方法。它对我来说就像一个魅力。希望它会对你有所帮助。 此示例适用于MenuItem,但您可以修改ComboBox。
创建一个按钮并通过Css隐藏它(不是代码:button.setInvisible(false))
final Button downloadInvisibleButton = new Button();
downloadInvisibleButton.setId("DownloadButtonId");
downloadInvisibleButton.addStyleName("InvisibleButton");
在您的主题中,添加此规则以隐藏downloadInvisibleButton
:
.InvisibleButton {
display: none;
}
当用户点击menuItem时:将fileDownloader
扩展为downloadInvisibleButton
,然后通过JavaScript模拟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();");
}
});