在vaadin webapp中管理UI弹出窗口

时间:2015-12-04 22:37:47

标签: java user-interface model-view-controller vaadin

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

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

如您所见,我创建了一个扩展此com.vaadin.ui.UI类的类,旨在使其成为一个弹出窗口。在第二节课中,我有另一个按钮,应该关闭弹出窗口。

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是一个在我的模型上运行的控制器。这个方法应该做两件事:

  • 使用弹出窗口中收集的数据更新模型(在此处作为参数传递)
  • 相应地更新一些主要UI组件(模型状态的图形表示)

在updateTopology方法中,我想使用getCurrent()方法调用我的主UI,以便按照我想要的方式修改它的一些组件。 我试图关闭弹出窗口UI以将当前UI更改回主要UI,以便我可以使用getCurrent()来获取我的主UI。为此,我尝试在click方法和upateTopology中使用popUpUI.close()和.detach(),但它不起作用 由于我是Vaadin的新手,我很可能误用了这些方法和/或错误地组织了我的用户界面,但我已经陷入困境,无法找到解决此问题的任何人。 如果您需要任何其他信息,请让我们知道。

提前致谢。

1 个答案:

答案 0 :(得分:0)

那边我确实错了。为了解决我的问题,我使用以下代码来关闭弹出窗口并访问我的主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);