有什么方法可以为新的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”);告诉弹出窗口限制用户修改地址栏。