2

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

现在我们正在处理@ViewScoped 对象,我想不出一种在添加 ViewScoped 对象时获得警报的方法。是否有类似于上述 2 的新侦听器?

4

1 回答 1

1

视图范围由 表示UIViewRoot#getViewMap()。此映射仅触发创建和销毁事件,PostConstructViewMapEventPreDestroyViewMapEvent分别可以由ViewMapListener实现侦听(顺便说一下,与 eg 相比,设置起来非常冗长HttpSessionBindingListener;JSF 系统事件侦听器 API 并没有经过深思熟虑,因为配置)。此地图不会触发任何添加/删除事件。可以肯定的是,我什至查看了 Mojarra 的源代码,如果它没有偷偷地这样做,但不幸的是,它没有。

您最好的选择是在您的视图范围 bean 中手动触发这些添加/删除@PostConstruct事件@PreDestroy。应该注意的是,在 JSF 2.0/2.1 中@PreDestroy,范围内的视图不会在会话过期时被调用。这是规范中的疏忽,已在 JSF 2.2 中修复。

于 2013-08-21T12:16:26.857 回答