Vaadin open link in new tab

2019-02-08 16:23发布

问题:

I have the following piece of code that I wrote using Vaadin. The code opens the page www.google.com when the user clicks the button.

My question is is there any way for me to specify that the page is to be opened in a new tab?

Thanks.

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

回答1:

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

The _blank window name is important here. Beware that you may also have browsers that will might open the resource in a new window instead.

There is also another signature to the open() method, i.e.

open(String url, String windowName, boolean tryToOpenAsPopup) 

that may fit the bill. HTH.

References: Page (Vaadin 7.2.1 API).



回答2:

Try the following code:

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


回答3:

It depends on what you want to achieve.

Solution 1

If you want your button to open a new tab, the BrowserWindowOpener might be the right solution.

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

Solution 2

Your button should open in a new tab only when Ctrl (Alt, Shift, ...) key on the keyboard is hold. If not, open in existing tab. In this case you can try to open a new tab using Page#open() method. Be aware that browsers will probably try to block your action and will warn user that they have blocked a pop-up window (even though it is not a pop-up but a new tab).

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");
  }
});

Solution 3

If you want the common behavior when the left click opens in existing tab and the middle mouse button click in a new tab, use the link instead of the button. In this case browsers probably let you open a new tab.

Link link = new Link(null, new ExternalResource(UriUtil.createAdUri(ad)));
link.setIcon(VaadinIcons.EYE);


标签: java vaadin