我已经看到很多关于将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上运行。
感谢。
答案 0 :(得分:1)
作为一个框架,CDI本身对Views没有任何了解。因此,注入@ViewScoped
bean将无效。
这是将JSF和CDI结合使用的主要缺点之一。但你并不是第一个遇到这个问题的人。
如果您坚持使用JSF 2.1实现,Apache CODI或Seam 3等框架将以某种方式扩展您的CDI,这样您也可以在@Inject
bean中@ViewScoped
。< / p>
如果你能够升级到JSF 2.2(我建议你这样做),这个CDI扩展将是JSF实现的原生部分,你可以毫不费力地使用它们。请参阅this explanation。