使用页面范围 Bean 的 @Destroy 注释

发布于 2024-11-01 06:19:47 字数 341 浏览 3 评论 0原文

我有一个页面范围的 Seam 组件,它有一个用 @Destroy 注释的无参数 void 方法,如下所示。我的问题是,即使浏览器页面发生更改(即页面范围结束),也永远不会调用 destroy 方法。

@Name("myPageBean")
@Scope(ScopeType.PAGE)
public class MyPageBean {

    @Destroy
    public void destroy {
        // Code runs when the component is destroyed.
    }

}

对于这个问题你有什么想法吗?

提前致谢。

I have a page scoped Seam component and it has a no-parameter void method annotated with @Destroy as is shown below. My problem is that destroy method is never called even if the browser page is changed (i.e. page scope ended).

@Name("myPageBean")
@Scope(ScopeType.PAGE)
public class MyPageBean {

    @Destroy
    public void destroy {
        // Code runs when the component is destroyed.
    }

}

Do you have an idea for this issue?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无人问我粥可暖 2024-11-08 06:19:47

页面上下文何时被销毁?

页面范围与 UI 组件树没有区别。
因此,当 JSF 删除 UI 时,页面上下文将被破坏
会话中的组件树(也称为视图)。然而,当
发生这种情况时,Seam 不会收到回调,因此
页面范围组件上的 @Destroy 方法永远不会被调用。如果
用户点击离开页面或关闭浏览器、页面上下文
必须等待清理到 JSF 中才能杀死它所在的视图
边界。这通常发生在会话结束时或者如果号码
会话中的视图数超出限制。这个限制是成立的
使用 com.sun.faces.numberOfViewsInSession 和
Sun 中的 com.sun.faces.numberOfLogicalViews 上下文参数
执行。两者都默认为 15。但是,通常最好不要
搞乱这些值。

页面范围应该仅仅被视为保持数据关联的一种方式
以视图作为维护 UI 完整性的一种手段
成分。这一重点与数据表尤其相关,
历史上一直存在问题。我不会将页面范围用作
用例或工作流程数据的通用存储机制。一个好办法
将其视为缓存。

http://www.seamframework.org/42514.lace

When does the page context get destroyed?

The page scope is indistinguishable from the UI component tree.
Therefore, the page context is destroyed when JSF removes the UI
component tree (also called the view) from the session. However, when
this happens, Seam does not receive a callback and therefore the
@Destroy method on a page-scoped component never gets called. If the
user clicks away from the page or closes the browser, the page context
has to wait to get cleaned up into JSF kills the view to which it is
bound. This typically happens when the session ends or if the number
of views in the session exceeds the limit. This limit is established
using the com.sun.faces.numberOfViewsInSession and
com.sun.faces.numberOfLogicalViews context parameters in the Sun
implementation. Both default to 15. However, it's generally best not
to mess with these values.

The page scope should be seen merely as a way to keep data associated
with a view as a means of maintaining the integrity of the UI
component. This focus is especially relevant for data tables, which
have historically been problematic. I would not use the page scope as
a general storage mechanism for use case or workflow data. A good way
to think of it is as a cache.

http://www.seamframework.org/42514.lace

稀香 2024-11-08 06:19:47

你在页面中使用过这个bean吗?如果没有,我猜销毁不会被调用,因为它永远不会被创建。
或者您可以添加 @StartUp 以在初始化 Scope 时强制创建 bean。

do you ever use this bean in a page?, if not, I guess the destroy will not be called because of it never be created.
or you can add @StartUp to force creating the bean when the Scope are initialized.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文