我想在我的应用程序中使用@ViewScoped-范围作为某些网页的后备 bean 。我也使用CDI将依赖注入(inject)到支持bean中。

但是,当我使用像这样注释的支持bean时

@ManagedBean
@ViewScoped

@Inject
someDependency (...)
@Inject批注将不会注入(inject)任何内容,并且在我访问依赖项时,我会立即获得一个NullPointerException

但是,当我用
@Named
@ViewScoped


@Inject
someDependency (...)

注入(inject)工作正常,但是现在@ViewScoped被忽略了,因为它不是CDI/Weld的一部分。

如何将@ViewScoped与CDI Weld一起使用?

最佳答案

问题是您将简单的托管Bean与CDI托管Bean混合使用,而它们无法协同工作。托管Bean是用于定义Bean及其注入(inject)的Bean的简单框架。 CDI是具有各种额外优势的独立野兽。

但是,托管Bean不能使用CDI注入(inject)点,但可以使用ViewScope,而CDI Bean使用CDI注入(inject)点和所有其他好东西,但是ViewScope不可用。

要解决该问题,您必须使用CDI并使用Seam-Faces库来使用 View 范围,或者删除CDI并坚持使用简单的托管bean(这是一个简单的实现)。

干杯,

安迪

关于scope - 查看CDI焊接中的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4865047/

10-12 02:49