0

我试过在 Vaadin7 中使用新的 FileDownloader。不幸的是,它需要一个 AbstractComponent 用于“扩展”组件(它监听点击的地方)

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

4

2 回答 2

1

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

您必须使用常规的单击/值更改侦听器恢复到弹出窗口样式(因此浏览器需要允许弹出窗口才能工作),创建资源并将其传递给已弃用但仍然有效的 Page.getCurrent()。打开(资源...)方法。

于 2013-06-14T16:40:39.150 回答
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至,然后通过 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();");
      }
    });
    
于 2015-06-04T11:55:54.870 回答