Opening a UI in a popup window

To open a new popup window in the browser showing another part of your application, you can use the new BrowserWindowOpener extension. Any component or MenuItem that you extend with BrowserWindowOpener will make clicking the component open a new browser window with some options for the content. Opening a popup this way helps you bypass most popup blockers.

One of the things that BrowserWindowOpener can be configured to open in the new window is a new instance of a Vaadin UI class.

public class OpeningUIInPopup extends UI {
  @Override
  protected void init(VaadinRequest request) {
    Button popupButton = new Button("Open popup with MyPopupUI");

    BrowserWindowOpener popupOpener = new BrowserWindowOpener(MyPopupUI.class);
    popupOpener.setFeatures("height=300,width=300");
    popupOpener.extend(popupButton);

    // Add a parameter
    popupOpener.setParameter("foo", "bar");

    // Set a fragment
    popupOpener.setUriFragment("myfragment");

    setContent(popupButton);
  }
}

public class MyPopupUI extends UI {
  @Override
  protected void init(VaadinRequest request) {
    setContent(new Label("This is MyPopupUI where parameter foo="
        + request.getParameter("foo") + " and fragment is set to "
        + getPage().getUriFragment()));
  }
}

In this example, a Button is created and extended with a BrowserWindowOpener. Furthermore, the size of the popup window is defined. See https://developer.mozilla.org/en-US/docs/DOM/window.open#Position_and_size_features for a description of the commonly supported features. If you don’t define any features, the browser will use its default setting which usually makes it open a new tab instead of opening a popup window.

The BrowserWindowOpener can also be used to open a Resource or any URL that you define using different constructors.