我想使用 @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 混合在一起,它们不能一起工作。 Managed Beans 是一个简单的框架,用于定义 bean 及其注入(inject)的 bean。 CDI 是一个独立的野兽,具有各种额外的优点。
但是,托管 bean 不能使用 CDI 注入(inject)点,但可以使用 ViewScope,而 CDI bean 使用 CDI 注入(inject)点和所有好东西,但 ViewScope 不可用。
要解决此问题,您必须使用 CDI 并使用 Seam-Faces 库来使用 View 范围,或者放弃 CDI 并坚持使用简单的托管 bean,这是一个简单的实现。
干杯,
安迪
关于scope - 在 CDI Weld 中查看范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865047/