gpt4 book ai didi

java - @PreserveOnRefresh - 目的和需要?

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:17 25 4
gpt4 key购买 nike

我对@PreserveOnRefresh 注释的目的有疑问。这个特定注解的目的是什么?必须在哪些场景下使用它?使用/不使用这个注解有什么影响?

谢谢,丹麦副总裁

最佳答案

other answer正如评论中指出的那样不太正确(在此处总结)。

Vaadin 7

此答案适用于 Vaadin 7。

Vaadin 6 在某些方面有所不同。

session 正在进行

一旦用户的浏览器到达您的 Vaadin 应用程序,一个 Servlet session被 build 。 VaadinSession包含 a wrapper围绕该 Servlet session ,可通过 VaadinSession.getSession() 访问.

session 一直持续到发生超时、您明确关闭它、用户退出浏览器应用程序或其他此类终止事件。但是用户点击重新加载/刷新功能不是这样的终止事件。

重新加载/刷新按钮

当该 session 正在进行时,用户可以单击/点击网络浏览器中的重新加载/刷新图标功能。默认情况下,这会导致您当前的 UI 子类对象被新的 UI 子类对象替换。

对您的用户来说,您的应用似乎已重新启动。但实际上您的应用程序没有被中断,只有特定浏览器窗口/选项卡中的内容被丢弃。您的应用程序(您的 VaadinSession)继续存在。

您的应用可能打开了其他浏览器窗口/选项卡,每个窗口/选项卡都有自己的 UI 子类对象。那些其他窗口/选项卡仍将使用相同的 UI 对象运行。所有这些正在运行的 UI 实例都绑定(bind)到相同的 VaadinSession

在重新加载/刷新时保留 UI 对象

您可能希望也可能不希望您的 UI 子类对象在浏览器窗口/选项卡的重新加载/刷新时被丢弃,具体取决于您的特定应用程序的性质。

您是否希望用户能够“重做”,从头开始?如果是这样,请保留此默认行为。不要应用注释。

如果您想更改浏览器重新加载/刷新的效果以保留 UI 对象及其状态,请应用 PreserveOnRefresh annotation .简单,几乎就像变魔术一样。

两级范围

在 Vaadin 7 中,您可以在浏览器窗口/选项卡级别(UI 实例)或应用程序范围内(在 VaadinSession 上)存储状态。

如果您希望一些数据在丢弃 UI 后仍然存在对象,通过调用 get/setAttribute 方法将该数据存储在 VaadinSession 上。例如,您可以在 VaadinSession 上保留用户登录/身份验证信息。

要了解更多这两个级别的范围,包括有关线程安全的重要信息,请参阅另一个问题,how to put data in session variable and get the data in different page in vaadin? .

图表

此图显示了 session 层次结构。上面三层(Servlet Container、ServletContext、HttpSession)都是标准的Servlet技术。在这些之下是特定于 Vaadin 的级别。

diagram of Servlet container, context, and session

关于java - @PreserveOnRefresh - 目的和需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23612615/

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