问题描述
||
我有一个页面范围的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。