在ViewScoped JSF Bean中注入的EJB引用丢失

时间:2013-10-18 16:15:52

标签: java jsf java-ee ejb websphere

我已经看到很多关于将EJB注入到ViewScoped JSF托管bean中的讨论。这样做似乎是可以接受的做法。

我正在尝试将我的应用程序中的一个bean从RequestScoped更改为ViewScoped,以添加一些其他所需的功能。

我修改了EJB类以确保所有内容都是可序列化的。创建我的JSF bean时,最初可以访问EJB。但是,当用户操作触发尝试调用EJB方法的bean中的方法时,将抛出NullPointerException。

只要我将ViewScoped中的bean切换回RequestScoped,一切正常。

这可能是正在使用的JSF实现中的错误吗?此应用程序使用MyFaces 2.1.12并在Websphere 7.0上运行。

感谢。

1 个答案:

答案 0 :(得分:1)

作为一个框架,CDI本身对Views没有任何了解。因此,注入@ViewScoped bean将无效。

这是将JSF和CDI结合使用的主要缺点之一。但你并不是第一个遇到这个问题的人。

如果您坚持使用JSF 2.1实现,Apache CODISeam 3等框架将以某种方式扩展您的CDI,这样您也可以在@Inject bean中@ViewScoped。< / p>

如果你能够升级到JSF 2.2(我建议你这样做),这个CDI扩展将是JSF实现的原生部分,你可以毫不费力地使用它们。请参阅this explanation