将FileDownloader与Combobox一起使用

时间:2013-06-14 10:08:56

标签: java vaadin

我尝试在Vaadin7中使用新的FileDownloader。不幸的是,它需要一个AbstractComponent用于“extend”组件(它在哪里监听点击)

有没有办法将它与组合框项目一起使用?因为它们不是AbstractComponents,因此不适合“扩展”方法。

2 个答案:

答案 0 :(得分:1)

Vaadin论坛已经讨论了很多,现在没有使用FileDownloader或类似功能的BrowserWindowOpener的方案。它们都只适用于AbstractComponents,因此不适用于Table和Tree的Action处理程序,Table上的行单击处理程序,Menu中的MenuItem等。这同样适用于各种选择框中的选定元素。

您必须使用常规的click / valuechange侦听器恢复弹出窗口样式(因此浏览器需要允许弹出窗口才能工作),创建资源并将其传递给已弃用但仍在工作的Page.getCurrent ()。open(Resource ...)方法。

答案 1 :(得分:1)

这是我的解决方法。它对我来说就像一个魅力。希望它会对你有所帮助。 此示例适用于MenuItem,但您可以修改ComboBox。

  1. 创建一个按钮并通过Css隐藏它(不是代码:button.setInvisible(false))

    final Button downloadInvisibleButton = new Button();
    downloadInvisibleButton.setId("DownloadButtonId");
    downloadInvisibleButton.addStyleName("InvisibleButton");
    

    在您的主题中,添加此规则以隐藏downloadInvisibleButton

    .InvisibleButton {
        display: none;
    }
    
  2. 当用户点击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();");
      }
    });