【发布时间】:2019-10-16 06:22:11
【问题描述】:
初始情况如下图所示。我有一个创建对话框的主 UI。在此对话框中会生成一些属性。我想在按钮单击时将属性传输到主 UI,然后关闭对话框。然后我想刷新 UI,以便 UI 使用新的属性/参数进行更新。
关闭对话框的工作方式如下:
this.getParent().ifPresent(parent -> {
if(parent instanceof Dialog)
{
((Dialog)parent).close();
}
});
但现在我不知道如何将属性传输到主 UI 并在之后刷新它。
为了更好的想象,我将解释一个用例。 在对话框中我得到一个特定的数字(´int i = 2`)。在 UI 中有一个创建选项卡的方法。我想要和我说的一样多的标签。所以我需要在 UI 类中声明 i 才能成功执行该方法。
创建标签的代码: 构造函数(MainView):
final Tabs tabs = this.createTabs();
this.add(this.div, tabs);
tabs.addSelectedChangeListener(e -> {
this.div.removeAll();
this.div.add(this.tabComponentMap.get(e.getSelectedTab()));
});
this.div.add(this.tabComponentMap.get(tabs.getSelectedTab()));
方法创建标签:
private Tabs createTabs()
{
for(int i = 0; i <= h; i++)
{
if(i == 0)
{
this.tabComponentMap.put(new Tab("Tab" + i), new SubView1());
}
else
{
this.tabComponentMap.put(new Tab("Tab" + i), new SubView2());
}
}
return new Tabs(this.tabComponentMap.keySet().toArray(new Tab[]{}));
}
h 是我从对话框中获得的属性。
【问题讨论】:
-
如果我只使用
UI.getCurrent().navigate("");,属性会分别消失,不会转移到 UI。 -
您是否考虑将值存储在父组件范围内可用的变量中?这就是我们通常的做法。
-
@Ben 我如何将它存储在对话框的父组件中?能举个例子吗?
-
你检查过这个问题吗? Vaadin (Flow): Navigating to destination with a shared object 您可以通过 VaadinSession 或导航路线传递您需要的信息。这似乎是您正在寻找的东西
-
另一种方法是将您的视图传递到对话框中,因此在关闭对话框之前您可以调用
myView.setValuesFromDialog(amountOfTabs);。不需要刷新用户界面,也不需要导航。