我正在使用JSF 2.0和现有框架。我们有一个监听器类,它允许我们通过实现HttpSessionAttributeListener和ServletRequestAttributeListener来查看何时将对象添加到请求/会话。
现在我们正在处理@ViewScoped对象,我无法找到一种方法来在添加ViewScoped对象时收到警报。是否有一个新的倾听者与上面提到的2相似?
答案 0 :(得分:1)
视图范围由UIViewRoot#getViewMap()
表示。此映射仅分别触发创建和销毁事件PostConstructViewMapEvent
和PreDestroyViewMapEvent
,这些事件可以由ViewMapListener
实现进行监听(相比之下,设置相当冗长)例如HttpSessionBindingListener
; JSF系统事件监听器API在配置方面并未经过深思熟虑。此地图不会触发任何添加/删除事件。可以肯定的是,我甚至看过Mojarra的source code,如果它没有偷偷摸摸地这样做,但不幸的是,它没有。
最好的办法是在视图范围内的bean的@PostConstruct
和@PreDestroy
中手动触发这些添加/删除事件。值得注意的是,在JSF 2.0 / 2.1中,在会话到期时不会调用作用域的@PreDestroy
。这是规范中的疏忽,并且对于JSF 2.2来说是固定的。