@Stroy Annotation with Page Scoped Beans

时间:2011-04-13 16:44:32

标签: seam destroy seam2

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

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

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

}

你对这个问题有所了解吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

页面上下文什么时候被破坏?

     

页面范围与UI组件树无法区分。   因此,当JSF删除UI时,页面上下文将被销毁   会话中的组件树(也称为视图)。但是,什么时候   发生这种情况,Seam没有收到回调,因此   永远不会调用页面范围组件上的@Destroy方法。如果   用户点击页面或关闭浏览器,页面上下文   必须等待清理成JSF杀死它的视图   界。这通常在会话结束或数字时发生   会话中的视图超出限制。确定此限制   使用com.sun.faces.numberOfViewsInSession和   com.sun.faces.numberOfLogical查看Sun中的上下文参数   实现。两者都默认为15.但是,通常最好不要   弄乱这些价值观。

     

页面范围应仅视为保持数据关联的一种方式   以视图作为维护UI完整性的手段   零件。这一焦点尤其与数据表有关   历史上一直存在问题。我不会将页面范围用作   用例或工作流数据的通用存储机制。一个好方法   把它想象成一个缓存。

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

答案 1 :(得分:0)

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