Vaadin在新标签页中打开链接

时间:2014-06-04 13:58:03

标签: java vaadin

我使用Vaadin编写了以下代码。当用户点击按钮时,代码会打开页面www.google.com

我的问题是,有什么方法可以指定要在新标签页中打开页面吗?

感谢。

button.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        getUI().getPage().setLocation("http://www.google.com");
    }
});

4 个答案:

答案 0 :(得分:19)

getUI().getPage().open("http://www.google.com", "_blank");

此处_blank窗口名称非常重要。请注意,您可能还有的浏览器可能会在新窗口中打开资源。

open()方法还有另一个签名,即

open(String url, String windowName, boolean tryToOpenAsPopup) 

可能适合该法案。 HTH。

参考文献:Page (Vaadin 7.2.1 API)

答案 1 :(得分:4)

请尝试以下代码:

BrowserWindowOpener opener = new BrowserWindowOpener(new ExternalResource(url));
opener.setFeatures("");
opener.extend(button);

答案 2 :(得分:0)

这取决于您要实现的目标。

解决方案1 ​​

如果您希望按钮打开一个新选项卡,则BrowserWindowOpener可能是正确的解决方案。

size_t length = SIZE_MAX / 2 + 2;
short object[length];

解决方案2

仅当按住键盘上的Ctrl(Alt,Shift,...)键时,您的按钮才应在新标签页中打开。如果没有,请在现有选项卡中打开。 在这种情况下,您可以尝试使用Page#open()方法打开一个新选项卡。请注意,浏览器可能会尝试阻止您的操作,并警告用户他们已阻止弹出窗口(即使它不是弹出窗口,而是新标签页)。

Button viewBtn = new Button("Click me");
BrowserWindowOpener opener = new BrowserWindowOpener(new ExternalResource("http://www.example.com"));
opener.setWindowName("_blank");
opener.extend(viewBtn);

解决方案3

如果您希望在现有选项卡中打开左键单击并在新选项卡中单击鼠标中键时具有常见的行为,请使用链接而不是按钮。在这种情况下,浏览器可能会让您打开一个新标签页。

Button viewBtn = new Button("Click me", VaadinIcons.EYE);
viewBtn.addClickListener(ev -> {
  if (ev.isCtrlKey()) {
      Page.getCurrent().open("http://www.example.com", "_blank", false);
  } else {
      Page.getCurrent().setLocation("http://www.example.com");
  }
});

答案 3 :(得分:0)

不建议使用ButtonBrowserWindowOpenergetUI().getPage().open("http://www.google.com", "_blank");,因为通常会被弹出窗口阻止程序阻止。

改为使用Link组件:

final Link link = new Link("Google", new ExternalResource("http://www.google.com"));
link.setTargetName("_blank");

Vaadin Link Documentation

中查看更多