有什么方法可以为新的BrowserWindowOpener(dynamicURL)传递动态URL吗?

我想要像这样的实现:
在表格中选择文件,然后单击按钮,这将打开一个浏览器,具有文件视图;
您可以打开随机文件,因此BrowserWindowOpener的参数必须是动态的。

我知道还有其他打开方式,例如:Page.getCurrent()。open ...,但我需要禁用URL栏以便像BrowserWindowOpener那样进行更改。

最佳答案

我发现的解决方案可能被视为黑客。如果有经验丰富的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”);告诉弹出窗口限制用户修改地址栏。

10-04 10:25