在 Vaadin 14 应用程序中的何处存储“UI”-对象范围状态?

Where to store `UI`-object scoped state in a Vaadin 14 app?

上下文(网络应用程序)

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

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

会话(每个用户)

要存储任何用户会话可用的状态,我们可以类似地在 VaadinSession 对象上获取和设置 "attributes"。

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

UI(网络浏览器window/tab)

上下文和会话这两个级别的范围是围绕 Java Servlet specification. But Vaadin effectively has a third, finer level of scope. Vaadin supports multi-window apps, where each web browser window (or tab) has its own content handled by a UI 对象中定义的等效项的包装器。如果用户在我们的 Vaadin 应用程序中打开了三个 windows,则该用户在服务器上拥有三个 UI 对象实例,它们位于一个 VaadinSession 对象中。

因此,似乎常见的需求是根据 UI(Web 浏览器 window/tab)存储状态。所以我希望在 UI 上看到与在 VaadinSessionVaadinContext 上看到的相同类型的 getAttributesetAttribute 方法。但是,不,我在 UI 上没有看到这样的方法。

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

在过去,在前几代Vaadin中,我们总是编写自己的UI子类。所以我们总是可以通过在我们自己的 UI 子类上定义成员变量来存储状态。现在,在 Vaadin Flow(v10+,当前 14)时代,我们不鼓励(禁止?)编写 UI 的子类。

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

在 Vaadin Flow 中有 ComponentUtil 帮助程序 class,它具有使用组件和 UI.

存储数据的方法

查看一对 ComponentUtil.setData 方法,一个 taking a Class as key, the other taking a String 作为键,就像在 VaadinContext & [= 上找到的 getAttribute/setAttribute 方法一样17=]。