如何强制 Vaadin v8 更新屏幕?

2022-09-03 00:33:16

我有一个小的Vaadin v8应用程序,它有几个输入字段(组合框,选择组等)。其中大多数的内容由第一个ComboBox的所选内容决定。但是,当我在其中选择某些内容时,所有其他内容都保持空白,直到我单击一个,此时它们都会更新。这不是预期的行为,但我认为这是由服务器端是最新的但不更新客户端视图引起的。(即使在我的第一个Combobox的ValueChangeListener中添加repaint()请求时)

一定有办法强制Vaadin获取我想要它显示的数据,即使没有点击其他组件?

编辑 我不允许这么快就发布我自己的问题的答案,所以我暂时把它放在这里:

我发现有一个javascript方法可以同步客户端和服务器。

myComponent.getApplication().getMainWindow().executeJavaScript("javascript:vaadin.forceSync();");

我现在遇到的唯一问题是,我的一个组合框上的 ValueChangeListener 仍然只在我单击另一个组合框(或同一个组合框两次)时触发。这是最奇怪的事情,因为第二个组合框在加载时会完美地触发它的事件。


答案 1

第一个组合框是否处于“即时”模式?

如果不是,它可能应该是:component.setImmediate(true)。

查看 https://vaadin.com/book/-/page/components.selection.html


答案 2

我遇到了同样的问题,请参阅下面如何在8.0.5版(从2017年开始)中完成此操作:

@Push
public class WebUi extends UI {
   public void fireComponentUpdated() {
      getUI().push();
   }
}

推荐