我想在我的应用程序中使用@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/