使用vaadin Page.getCurrent()。open()方法时,是否可以传递参数?

时间:2019-06-11 13:24:24

标签: java vaadin

我正在尝试打开一个窗口或弹出窗口并将一些值传递给它。 我想使用参数进行发布。

我当前使用的是vaadin 7.7.6,com.vaadin.server.Page.getCurrent()。open(),它会在新的浏览器窗口中打开url,也不知道如何传递值,它也是可以使其弹出而不用打开新的浏览器窗口


    private PNativeButton button()
    {
        if (button== null)
        {
            button= new button("Press Me");
            button.getNativeButton().setHeight(36, Unit.PIXELS);
            button.setEnabled(true);
            button.addClickListener(new ClickListener()
            {
                @Override
                public void buttonClick(ClickEvent event)
                {
                    getCurrent().open("https://stackoverflow.com/", "Pressed", 100, 100, BorderStyle.DEFAULT);
                }
            });
        }
        return button;
    }

我期望有一个新的弹出窗口,其中带有某些参数的POST网址。

2 个答案:

答案 0 :(得分:1)

您可以扩展Window类并向其中添加一些其他参数。例如:

class MySub extends Window {
    private String message;

    public MySub() {
        super("Sub Window");
        center();
    }

    public void initContent() {
       setContent(new Button(message, event -> close()));
    }

    public void setMessage(String message) {
        this.message = message;
   }
}

并将其用于您的用户界面

public static class SubWindowUI extends UI {
    @Override
    protected void init(VaadinRequest request) {
        MySub mySub = new MySub();
        mySub.setMessage("Close me !");
        mySub.initContent();

        addWindow(subWindow); // Open it in the UI
    }
}

答案 1 :(得分:1)

您没有说明您使用的是哪个Vaadin版本。但是我猜想是Vaadin8。如果是这样,并且您的目标是打开带有外部页面的浏览器选项卡,则我建议使用BrowserWindowOpener,因为它具有添加查询参数的便捷API。

BrowserWindowOpener opener =
    new BrowserWindowOpener(url);
opener.setParameter("parameter","value");

Button button = new Button("Press me");
opener.extend(button);

上面的将打开一个新的浏览器窗口或选项卡,如果您想打开一个弹出窗口组件(例如,参见其他答案)是更合适的方法。

为了在Window组件中显示外部内容,您需要使用BrowserFrame(正在使用iframe)或Embbeded组件将URL包装为组件。您可以在Vaadin documentation中找到几个示例。