web-dev-qa-db-ja.com

Vaadinは新しいタブでリンクを開きます

Vaadinを使用して作成した次のコードがあります。コードはページを開きますwww.google.comユーザーがボタンをクリックしたとき。

私の質問は、ページを新しいタブで開くように指定する方法はありますか?

ありがとう。

button.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        getUI().getPage().setLocation("http://www.google.com");
    }
});
16
user3702643
_getUI().getPage().open("http://www.google.com", "_blank");
_

ここでは、__blank_ウィンドウ名が重要です。あなたはまたそのブラウザを持っているかもしれないことに注意してください 意志 代わりに、新しいウィンドウでリソースを開く場合があります。

open()メソッドには別のシグネチャもあります。

_open(String url, String windowName, boolean tryToOpenAsPopup) 
_

それは法案に合うかもしれません。 HTH。

参照: ページ(Vaadin 7.2.1 API)

21
VH-NZZ

次のコードを試してください。

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

ButtonBrowserWindowOpener、およびgetUI().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 を参照してください。

0
Martin Vysny

それはあなたが何を達成したいかによります。

ソリューション1

ボタンで新しいタブを開く場合は、BrowserWindowOpenerが適切なソリューションである可能性があります。

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

ソリューション2

キーボードのCtrl(Alt、Shift、...)キーが押されている場合にのみ、ボタンが新しいタブで開きます。そうでない場合は、既存のタブで開きます。この場合、Page#open()メソッドを使用して新しいタブを開こうとすることができます。ブラウザはおそらくあなたのアクションをブロックしようとし、ポップアップウィンドウをブロックしたことをユーザーに警告することに注意してください(ポップアップではなく新しいタブですが)。

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

ソリューション

既存のタブで左クリックを開き、新しいタブでマウスの中ボタンをクリックしたときの一般的な動作が必要な場合は、ボタンの代わりにリンクを使用してください。この場合、ブラウザではおそらく新しいタブを開くことができます。

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