在 vaadin webapp 中管理 UI 弹出窗口

Managing UI popup in vaadin webapp

我正在使用 Vaadin 构建一个小型网络应用程序。 我的应用程序中有一个主要 UI。那里有一个调用此代码的按钮:

BrowserWindowOpener opener = new BrowserWindowOpener(PopUp.class);
opener.setFeatures("height=500,width=500,resizable");
opener.extend(button);

如您所见,我创建了一个 class 扩展此 com.vaadin.ui.UI class,打算使其成为一个弹出窗口。在这一秒 class 我有另一个按钮应该关闭弹出窗口。

public void click(Button.ClickEvent event){
    TopologyService tService = new TopologyService();
    tService.updateTopology(FormAction.ADD, TargetedElement.CONNECTION, comboBoxi1.getValue(), comboBoxi2.getValue(), comboBoxNorm.getValue(), textfieldSpeed.getValue());  
}

点击按钮调用此函数时。 这里的 topologyService 是一个在我的模型上运行的控制器。这个方法应该做两件主要的事情:

在 updateTopology 方法中,我想使用 getCurrent() 方法调用我的主程序 UI,以便按照我想要的方式修改它的某些组件。 我试图关闭弹出窗口 UI 以将当前的 UI 改回主要的,这样我就可以使用 getCurrent() 来获取我的主要的 UI。为此,我尝试在点击方法和 upateTopology 方法中使用 popUpUI.close() 和 .detach(),但它不起作用 由于我是 Vaadin 的新手,很可能我滥用了这些方法 and/or 错误地组织了我的 UIs 但我被卡住了,找不到任何人解决了这个问题。 如果您需要任何其他信息,请告诉我们。

提前致谢。

我确实在那里出错了。为了解决我的问题,我使用了以下代码来关闭弹出窗口并访问我的主 UI。有了这个访问权限,我可以修改和访问我需要的一切。

UI popUp, mainUI;
popUp = UI.getCurrent();
JavaScript.eval("close()");
popUp.close(); 

VaadinSession session = getSession();
mainUI = session.getUIById(mainUIId);
UI.setCurrent(mainUI);

关于来自我的控制器的方法调用,我让它在弹出窗口中被调用,因为它在关闭之前结束了它的任务。

我的弹出窗口是在使用这样的 BrowserWindowOpener 单击按钮时调用的

opener = new BrowserWindowOpener(PopUp.class);
opener.extend(button);