gpt4 book ai didi

java - 推送后如何更新 Vaadin Grid?

转载 作者:行者123 更新时间:2023-12-01 22:15:18 26 4
gpt4 key购买 nike

在从不同的 UI 实例对网格进行更改后,我尝试更新 Vaadin 中的网格。

为了详细说明,我有两个不同的 UI 实例,UI1 和 UI2(来自两个不同浏览器的选项卡)。这些 UI 实例包含一个 View ,该 View 包含一个由联系人对象组成的网格,这些对象具有各种属性,例如姓名、年龄、性别...

我从 UI1 将联系人添加到网格,并且希望 UI2 无需刷新即可立即查看更新的网格。

为了实现这一点,我知道我必须使用 Vaadin Push,我已经使用 Broadcaster 类设置了它。我的 UI 类中有一个 receiveBroadcast() 方法,只要 View 类使用 broadcast() 方法向 UI 发送广播,该方法就会更新 UI。我的 UI 类的一部分如下所示:

@Title("Contact Book")
@Theme("reindeer")
@Push
public class UserInterface extends UI implements BroadcastListener{

private Navigator navigator;

@Override
protected void init(VaadinRequest request){
navigator = new Navigator(this, this);
navigator.addView(ContactBookView.NAME, new ContactBookView());

Broadcaster.register(this);
}
@Override
public void detach(){
Broadcaster.unregister(this);
super.detach();
}

@Override
public void receiveBroadcast(Grid grid) {
access(()->{

// update grid here
Notification.show("Grid updated", Notification.Type.TRAY_NOTIFICATION);
});
}
}

我的 Broadcaster 类与 this link 中的相同(我只是稍微改变了方法,这样我就可以将网格作为参数传递)

然后在我的 ContactBookView 类中,我在添加或更改项目后调用 Broadcaster.broadcast(grid) 方法,以便我可以在 UI 类的 access() 中以某种方式更新网格 方法,但我尝试过的似乎都不起作用。我知道推送正在起作用,因为当收到广播时,我可以在所有 UI 实例中看到“网格已更新”消息。

我尝试删除 View 并重新初始化

navigator.removeView(ContactBookView.NAME);
navigator.addView(ContactBookView.NAME, new ContactBookView());

尝试完全清空网格并重新填充

grid.removeAllColumns();
grid.setContainerDataSource(container);

尝试使用这个丑陋的解决方法强制网格自行更新

grid.setContainerDataSource(grid.getContainerDataSource());

尝试执行 JavaScript 查询来强制 UI 同步

JavaScript.getCurrent().execute("javascript:vaadin.forceSync();");

但是这些都不起作用。也许我做错了什么?仅供引用,我的 Vaadin 版本是 7.5.0。

我很感激任何形式的反馈或建议,

谢谢。

最佳答案

在重新初始化当前 View 后,我设法通过重新导航到当前 View 来解决该问题。最终的 UI 访问方法如下所示:

public void receiveBroadcast() {
access(()->{

navigator.removeView(ContactBookView.NAME);
navigator.addView(ContactBookView.NAME, new ContactBookView());
navigator.navigateTo(ContactBookView.NAME);
Notification.show("Grid updated", Notification.Type.TRAY_NOTIFICATION);
});

这样, View 就会在后台刷新并推送到 UI 实例,而无需物理刷新。

我确信可能有更好的解决方法,这个看起来有点难看,但它目前满足我的需求。不过,我仍然希望任何不同的方法。

关于java - 推送后如何更新 Vaadin Grid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31202083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com