0

我最近升级到使用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”的东西,这些可以帮助我吗?他们合法吗?或者只是一些人为了使某事工作而拼凑起来的一些技巧?

帮助 !!!

4

1 回答 1

0

经过大量研究和论坛搜索,我得出结论,让 JSF-2.3 和 CDI-1.2 一起工作以利用 WAS 中的 f:websocket 特性几乎是不可能的。请参阅在 IBM 支持页面上的帖子,该帖子证实了这一点。

A way to still make use of web sockets using JSF-2.2 is to use the Javax.websocket package as @Gas pointed out in my previous question. However the limitation of this web socket implementation is that it is nowhere near as easy to send data contained in a SessionScoped ManagedBean to the client of that session only as it would have been using f:websocket from JSF-2.3 as I would have liked to do.

于 2017-05-28T23:25:35.183 回答