【发布时间】:2017-10-21 22:36:33
【问题描述】:
我最近升级到使用 Oracles new JSF-2.3,这涉及在我的 pom.xml 中添加依赖项作为外部库,因为我使用的是 maven,而不是以前使用 WebSphere Application Server (WAS) inbuilt JSF-2.2 feature。我想升级以利用新的 f:websocket 功能,该功能允许我将消息从服务器推送到客户端,以进行一些巧妙的异步页面加载。
但在我们开始之前,一旦我升级,我注意到我的 @ManagedBean 注释已被弃用。经过一些快速的谷歌搜索后,我发现我应该使用 CDI 注释,如 @Named 等。这导致了我的 JSF-2.3 not finding my @Named CDI-1.2 managed bean 问题,从中我了解到我不能将外部 JSF 库与 WAS 的 inbuilt CDI-1.2 feature 一起使用。
我的问题是,根据服务器端的JSF-2.3 spec,我需要使用 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 dependency(因此将 CDI 添加为外部库),但也没有用
- 还尝试仅添加 Javax.inject library,因为我只需要 @Inject 注释作为依赖项而不是 CDI,这也不起作用(值得一试)
如果我无法实现使用自定义 JSF 库的 CDI 实现,我不知道应该如何使用 WAS 中的新 JSF-2.3 功能,我肯定错过了一些东西...
我还听说过一种叫做“cdi-enablers”的东西,这些对我有帮助吗?他们合法吗?或者只是一些人为了使某些东西发挥作用而拼凑起来的一些技巧?
求助!!!
【问题讨论】:
-
我已经测试了当 JSF 和 CDI 与 webapp 捆绑在一起时,mojarra JSF 2.3 impl 可以从 Liberty 启动。我在应用程序中打包 CDI 时遵循的说明如下:balusc.omnifaces.org/2013/10/how-to-install-cdi-in-tomcat.html 但是请注意,我无法让 f:websocket 功能工作;似乎需要在 CDI/JSF 和服务器的 websockets impl 之间进行服务器集成。
标签: java jsf cdi websphere-liberty jsf-2.3