Servlets 在Vaadin 14应用程序中,在何处存储“UI”-对象范围的状态? 上下文(web应用程序)

Servlets 在Vaadin 14应用程序中,在何处存储“UI”-对象范围的状态? 上下文(web应用程序),servlets,scope,vaadin,vaadin-flow,Servlets,Scope,Vaadin,Vaadin Flow,为了存储整个Vaadin应用程序的可用状态,我们可以在运行时获取并设置表示整个基于Vaadin的web应用程序的对象的“属性”。这些属性充当键值集合,其中键的类型为String,值的类型为Object 我们通过调用UI.getCurrent().getSession().getService().getContext()来访问上下文 会话(每个用户) 为了存储任何一个用户会话可用的状态,我们可以类似地获取并设置对象的“属性” 我们通过调用UI.getCurrent().getSession()来

为了存储整个Vaadin应用程序的可用状态,我们可以在运行时获取并设置表示整个基于Vaadin的web应用程序的对象的“属性”。这些属性充当键值集合,其中键的类型为
String
,值的类型为
Object

我们通过调用
UI.getCurrent().getSession().getService().getContext()
来访问上下文

会话(每个用户) 为了存储任何一个用户会话可用的状态,我们可以类似地获取并设置对象的“属性”

我们通过调用
UI.getCurrent().getSession()
来访问会话

UI
(web浏览器窗口/选项卡) 这两个级别的范围(上下文和会话)是规范中定义的等价物的包装。但瓦丁实际上有第三个更精细的范围。Vaadin支持多窗口应用程序,其中每个web浏览器窗口(或选项卡)都有自己的内容由对象处理。如果用户在我们的Vaadin应用程序中打开了三个窗口,则该用户在服务器上有三个
UI
对象实例,位于单个
Vaadin会话
对象中

因此,一个常见的需求似乎是按照
UI
(web浏览器窗口/选项卡)存储状态。因此,我希望在
UI
上看到与
VaadinSession
&
VaadinContext
上相同的
getAttribute
方法。但是,不,我在
UI
上没有看到这样的方法

➥ 是否有适当的位置存储每个
UI
对象的状态

在过去,在Vaadin的前几代人中,我们总是编写自己的UI子类。因此,我们可以通过在自己的
UI
-子类中定义成员变量来存储状态。现在,在Vaadin Flow(v10+,目前为14)的时代,我们被阻止(禁止?)编写
UI
的子类

在提交此类属性的功能请求之前,我想问一下,我是否错过了人们在当前基于Vaadin的应用程序中存储其per-
UI
状态的常用位置。

在Vaadin Flow中,有一个helper类,它具有使用组件和UI存储数据的方法

查看一对
ComponentUtil.setData
方法,一个作为键,另一个作为键,就像
getAttribute
/
setAttribute
上的
VaadinContext
VaadinSession
上的
方法一样

在Vaadin Flow中有一个helper类,它具有使用组件和UI存储数据的方法


查看一对
ComponentUtil.setData
方法,一个作为键,另一个作为键,就像
getAttribute
/
setAttribute
上的
VaadinContext
VaadinSession
上的
方法一样

感谢您的回复和解决方案。我确实打开了功能请求。Bug?您的方法失败了,因为
UI
对象正在一次又一次地被快速、莫名其妙地重新实例化。创建一个新的Vaadin 14应用程序,采用“纯Java Servlet”风格。附加
VaadinServiceInitListener
的实现,然后为
UIInitEvent
添加侦听器,如手册所示。将
System.out.println
调用放入该侦听器。即使您单击默认应用程序的“单击我”按钮,也会看到生成新的UI实例。
UI
对象不应该在浏览器窗口/选项卡打开的整个时间内保持稳定吗?我在Vaadin论坛上发布了一个示例应用程序,显示了这种看似疯狂的
UI
类行为:是的,它不应该是那样的,它会引起一些麻烦,请参阅感谢您的回复和解决方案。我确实打开了功能请求。Bug?您的方法失败了,因为
UI
对象正在一次又一次地被快速、莫名其妙地重新实例化。创建一个新的Vaadin 14应用程序,采用“纯Java Servlet”风格。附加
VaadinServiceInitListener
的实现,然后为
UIInitEvent
添加侦听器,如手册所示。将
System.out.println
调用放入该侦听器。即使您单击默认应用程序的“单击我”按钮,也会看到生成新的UI实例。
UI
对象不应该在浏览器窗口/选项卡打开的整个时间内保持稳定吗?我在Vaadin论坛上发布了一个示例应用程序,展示了这种看似疯狂的
UI
类行为:是的,它不应该是这样的,它会引起一些麻烦,请参阅相关:相关: