我最近升级到使用Oracle 的新 JSF-2.3,这涉及在我的 pom.xml 中添加依赖项作为外部库,因为我使用的是 maven,而不是以前使用 WebSphere Application Server (WAS) 的内置 JSF-2.2 功能。我想升级以利用新的 f:websocket 功能,它允许我将消息从服务器推送到客户端,以进行一些巧妙的异步页面加载。
但在我们开始之前,一旦我升级,我注意到我的 @ManagedBean 注释已被弃用。经过一些快速的谷歌搜索后,我发现我应该使用 CDI 注释,如 @Named 等,这导致我的JSF-2.3 找不到我的 @Named CDI-1.2 托管 bean问题,从中我了解到我无法使用外部 JSF 库与 WAS 的内置 CDI-1.2 功能一起使用。
我的问题是,根据服务器端的JSF-2.3 规范,我需要使用 CDI @Inject 注释将“PushContext”注入到我的托管 bean 上的变量中,如下所示:
@Inject @Push(channel="foo")
private PushContext bar;
我一直无法找到与 @Inject 等效的 JSF 注释,它可以将实例注入到我的 PushContext 变量中,并且例如尝试过 @ManagedProperty。因此,我需要实现与 JSF 2.3 一起使用的 CDI 来完成这项工作。
我尝试过的事情:
- 我已经尝试使用 WAS 中的内置 CDI 功能以及上面提到的问题中显示的代码。
- 我尝试不使用默认 CDI 功能,并在我的 pom.xml 中添加CDI-1.2 依赖项(因此将 CDI 添加为外部库),这也不起作用
- 还尝试仅添加Javax.inject 库,因为我只需要 @Inject 注释作为依赖项而不是 CDI,这也不起作用(值得一试)
如果我无法使用自定义 JSF 库实现 CDI 的实现,我不知道应该如何使用 WAS 中的新 JSF-2.3 功能,我肯定错过了一些东西......
我也听说过一种叫做“cdi-enablers”的东西,这些可以帮助我吗?他们合法吗?或者只是一些人为了使某事工作而拼凑起来的一些技巧?
帮助 !!!