gpt4 book ai didi

java - Vaadin Spring 启动 : "Cannot access state in VaadinSession or UI without locking the session" when multiple users access UI

转载 作者:行者123 更新时间:2023-12-02 01:04:57 32 4
gpt4 key购买 nike

我有一个带有 Spring Boot 的 vaadin flow (13) 应用程序。我有一个 VerticalLayout,注释为 @UIScope具有多个子布局。子布局用 @Scope("prototype") 注释。并通过 ctx.getBean(SubUI.class, ...) 创建。根据父 UI (VerticalLayout) 上的选择和按钮单击,添加或删除子布局。

只要我单独使用该应用程序,一切都可以正常工作(这就是为什么我在将应用程序交付给客户进行验收测试后立即发现错误的原因)。他们对多个用户进行了测试。只要一个用户使用该应用程序,一切都会正常,但一旦第二个用户进入 UI(VerticalLayout),就会引发以下异常:

java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Cannot access state in VaadinSession or UI without locking the session.
at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_202]
at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_202]
...

我为我的父布局尝试了不同的注释(@UIScope、@Scope("prototype")、@VaadinSessionScope),但没有解决我的错误。

我用谷歌搜索了这个问题并找到了一些线程,但它们都没有帮助我解决我的问题。我不太确定问题是由我的 UI/布局的范围引起的还是由数据绑定(bind)引起的。在我的子布局中,数据使用 Binder<MyEntity> binder = new Binder<>(MyEntity.class); 绑定(bind)。和binder.forField(xxx).bind(MyEntity::getXY,MyEntity::setXY); .

有人可以解释一下我的问题是什么吗?我会非常高兴,因为我需要为我的客户测试提供一个固定版本。

亲切的问候

最佳答案

您的应用程序中有一些逻辑尝试从后台线程修改UI状态、组件等。这应该通过锁定来完成。因此,您需要将从后台方法调用的逻辑封装在 View 中

getUI().ifPresent(ui -> ui.access(() -> {
...
}));

此外,还应启用服务器推送

文档:https://vaadin.com/docs/latest/advanced/server-push

关于java - Vaadin Spring 启动 : "Cannot access state in VaadinSession or UI without locking the session" when multiple users access UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60179159/

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