有没有办法为新的BrowserWindowOpener(dynamicURL)传递动态网址?
我想要实现如下: 选择表格中的文件,然后点击按钮,打开浏览器,查看文件; 您可以打开随机文件,因此BrowserWindowOpener的参数必须是动态的。
我知道还有其他方式可以打开:Page.getCurrent()。open ...但是我需要禁用URL栏来进行更改,比如BrowserWindowOpener。
答案 0 :(得分:2)
我发现的解决方案可能被视为黑客攻击。如果任何经验丰富的Vaadin开发者碰巧遇到过这篇文章,请告诉我是否有更好的方法。
与此同时,解决方案如下:
以下是一个例子:
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”); 告诉弹出窗口限制用户修改地址栏。