在 JSF 2.2 中使用 OmniFaces 2.1 ViewScoped 和 Spring 3.1.0

Using OmniFaces 2.1 ViewScoped with Spring 3.1.0 in JSF 2.2

我正在尝试将某些页面转换为查看范围(从会话范围)以启用多个浏览器选项卡以支持显示数据表中多个条目的数据。

有谁知道按照这个 PrimeFaces 博客 Porting JSF 2.0′s ViewScope to Spring 3.0 中的步骤是否可以扩展 Spring 以使用来自 Omnifaces 2.1 的 org.omnifaces.cdi.ViewScoped

您可以使用您找到的博客中描述的方法。只有您不这样做,也不能以这样的方式进行移植,以至于它在幕后实际上使用了特定的 @ViewScoped 注释。基本上,您应该实现与这些注释在幕后使用相同的代码。

标准 JSF @ViewScoped 和 OmniFaces @ViewScoped 在幕后所做的与博客中描述的基本相同:通过 UIViewRoot#getViewMap() 引用 bean 实例。只是,JSF 2.0/2.1 @ViewScoped 没有在所有情况下正确触发 bean 的 @PreDestroy。例如。当底层 HTTP 会话过期时,它们不会被调用。 OmniFaces 为 JSF 2.0/2.1 用户解决了这些问题。 JSF 本身在 2.2 中已经解决了它们。所以在 JSF 2.2 中并没有真正使用 OmniFaces @ViewScoped 的理由。

虽然我想在这里暗示我在未来的 OmniFaces 2.2 计划添加一个 beforeunload 挂钩到 <o:form> 当 OmniFaces @ViewScoped bean 被使用,所以当用户通过 GET 导航离开,或刷新页面,或关闭浏览器时,bean 也会真正被销毁 window,使其再次变得更有用:)