BrowserWindowOpener和动态网址/资源VAADIN

时间:2014-03-10 15:45:58

标签: java url browser vaadin

有没有办法为新的BrowserWindowOpener(dynamicURL)传递动态网址?

我想要实现如下: 选择表格中的文件,然后点击按钮,打开浏览器,查看文件; 您可以打开随机文件,因此BrowserWindowOpener的参数必须是动态的。

我知道还有其他方式可以打开:Page.getCurrent()。open ...但是我需要禁用URL栏来进行更改,比如BrowserWindowOpener。

1 个答案:

答案 0 :(得分:2)

我发现的解决方案可能被视为黑客攻击。如果任何经验丰富的Vaadin开发者碰巧遇到过这篇文章,请告诉我是否有更好的方法。

与此同时,解决方案如下:

  • 使用ExternalResource初始化BrowserWindowOpener(您可以将任何url放在ExternalResource的构造函数中),其中重写了 getURL 方法,以返回取决于表中选择的值
  • 每次更改表中的值时,将BrowserWindowOpener标记为脏,以便触发共享状态的更改

以下是一个例子:

public class DownloadFileTable extends CustomComponent {

private String currentSelectedFile = null;

public DownloadFileTable() {

    VerticalLayout layout = new VerticalLayout();
    setCompositionRoot(layout);

    IndexedContainer container = new IndexedContainer();
    container.addContainerProperty("name", String.class, "default");
    container.addItem("image1.jpg").getItemProperty("name").setValue("image1.jpg");
    container.addItem("text.csv").getItemProperty("name").setValue("text.csv");
    container.addItem("document.doc").getItemProperty("name").setValue("document.doc");

    Button downloadButton = new Button("Download selected file");
    final BrowserWindowOpener browserWindowOpener = new BrowserWindowOpener(new ExternalResource("http://google.com") {

        @Override
        public String getURL() {
            return currentSelectedFile;
        }
    });
    browserWindowOpener.setFeatures("location=0");
    browserWindowOpener.extend(downloadButton);

    Table table = new Table("Files", container);
    table.setSelectable(true);
    table.setImmediate(true);
    table.addValueChangeListener(new Property.ValueChangeListener() {
        @Override
        public void valueChange(Property.ValueChangeEvent event) {
            currentSelectedFile = (String) event.getProperty().getValue();
            browserWindowOpener.markAsDirty();
        }
    });
    layout.addComponent(table);
    layout.addComponent(downloadButton);
}

}

browserWindowOpener.setFeatures(“location = 0”); 告诉弹出窗口限制用户修改地址栏。