将 ICEfaces 迁移到 PrimeFaces 会导致警告:JSF1085:自定义范围“#{window}”计算为 null。托管 bean 未推送到范围

问题描述 投票:0回答:1

我正在尝试将我的项目从 Tomcat8.5 或更高版本上的 jdk 1.7 mojarra 2.1.9 和icefaces 3.30 迁移到 jdk8 mojarra 2.2.10 和 primefaces 12

我已经更改了所有库并且出现了登录页面,但是,当我尝试登录时,我的控制台日志中有很多警告消息

警告:JSF1085:自定义范围“#{window}”计算结果为 null。 托管 bean 未推送到范围。

2024 年 24 月 24 日上午 8:06:18 com.sun.faces.mgbean.BeanManager$ScopeManager$CustomScopeHandler 句柄

这里是登录页面调用的Bean

@ManagedBean(name = "dashboardDetail")
@CustomScoped(value = "#{window}")
public class DashboardBean implements Serializable {
       //attributes getters and setters
}

我对迁移过程感到非常困惑,因为我找不到要做的步骤!

如果我更改 ViewScoped 中的范围,一切都可以,但我想知道为什么!

有人可以向我解释或指示一个好的迁移指南/教程吗?

非常感谢。

jsf primefaces migration icefaces custom-scope
1个回答
0
投票

如果我更改 ViewScoped 中的范围,一切都可以,但我想知道为什么!

这是因为“窗口范围”不是由 JSF 本身提供,而是由 ICEfaces 提供。 以下是他们的
文档的摘录:

Window Scope 是 ICEfaces 2 添加到 JSF 2 的自定义范围。此范围的目的是通过提供比 ViewScoped 稍长的对象生命周期来填补 ViewScoped 和 SessionScoped 之间的空白,但没有 SessionScoped 的开销。

换句话说,当您从项目中删除 ICEfaces 库时,此范围将停止在您的 bean 上运行,您需要迁移到标准 JSF

@ViewScoped

顺便说一下,最接近的匹配标准 JSF 范围是

@ClientWindowScoped

,但它仅在 JSF 4.0 中可用,而您显然仍然坚持使用 Tomcat 8.x,因此最多也只能使用 JSF 2.2。只要当您硬刷新页面或通过结果目标链接导航回来时重新创建 bean 不是问题,那么 @ViewScoped
 将在之前配置为“窗口范围”的任何 bean 上完美运行。

另请参阅:

  • 如何选择合适的bean范围?.
© www.soinside.com 2019 - 2024. All rights reserved.