@使用页面范围的Bean销毁注释

问题描述

|| 我有一个页面范围的Seam组件,它有一个无参数的void方法,并带有@Destroy注释,如下所示。我的问题是即使浏览器页面已更改(即页面作用域已终止)也永远不会调用destroy方法
@Name(\"myPageBean\")
@Scope(ScopeType.PAGE)
public class MyPageBean {

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

}
您对这个问题有想法吗? 提前致谢。     

解决方法

  页面上下文何时被破坏?      页面范围与UI组件树没有区别。   因此,当JSF删除UI时,页面上下文将被破坏。   会话中的组件树(也称为视图)。但是,当   发生这种情况,Seam不会收到回调,因此   页面范围内的组件上的@Destroy方法永远不会被调用。如果   用户点击离开页面或关闭浏览器,页面上下文   必须等待清理到JSF中才能杀死它所在的视图   界。通常在会话结束时或如果号码为   会话中的观看次数超出了限制。此限制已建立   使用com.sun.faces.numberOfViewsInSession和   Sun中的com.sun.faces.numberOfLogicalViews上下文参数   实施。两者都默认为15。但是,通常最好不要   弄乱这些价值观。      页面范围应仅被视为保持数据关联的一种方式   作为维护UI完整性的一种方法   零件。此重点与数据表特别相关,   历史上一直是有问题的。我不会将页面范围用作   用例或工作流数据的通用存储机制。一个好方法   认为它是一个缓存。 http://www.seamframework.org/42514.lace     ,您是否曾经在页面中使用过此bean?否则,我猜将不会调用destroy,因为它永远不会被创建。 或者,您可以添加@StartUp以在初始化Scope时强制创建Bean。