在JSF中有一种方法可以在添加新的@ViewScoped对象时得到通知吗?

时间:2013-08-21 00:07:03

标签: jsf view

我正在使用JSF 2.0和现有框架。我们有一个监听器类,它允许我们通过实现HttpSessionAttributeListener和ServletRequestAttributeListener来查看何时将对象添加到请求/会话。

现在我们正在处理@ViewScoped对象,我无法找到一种方法来在添加ViewScoped对象时收到警报。是否有一个新的倾听者与上面提到的2相似?

1 个答案:

答案 0 :(得分:1)

视图范围由UIViewRoot#getViewMap()表示。此映射仅分别触发创建和销毁事件PostConstructViewMapEventPreDestroyViewMapEvent,这些事件可以由ViewMapListener实现进行监听(相比之下,设置相当冗长)例如HttpSessionBindingListener; JSF系统事件监听器API在配置方面并未经过深思熟虑。此地图不会触发任何添加/删除事件。可以肯定的是,我甚至看过Mojarra的source code,如果它没有偷偷摸摸地这样做,但不幸的是,它没有。

最好的办法是在视图范围内的bean的@PostConstruct@PreDestroy中手动触发这些添加/删除事件。值得注意的是,在JSF 2.0 / 2.1中,在会话到期时不会调用作用域的@PreDestroy。这是规范中的疏忽,并且对于JSF 2.2来说是固定的。