JSF 2 - 未检测到@ManagedBean

Ste*_*han 6 java jsf web-applications

我有一个ParentBean具有@ManagedBean注释的类.如果我将此类子类化,ChildBean则不会继承@ManagedBean批注,尽管@ManagedBean批注具有元标注Inherited.

我错过了什么?

JSF 2.0
Mojarra 2.0.6 | JBoss 5.1.0.GA
Eclipse Indigo - Build id: 20110615-0604

编辑:仍在寻找解决方案......

Boz*_*zho 7

javax.annotation.ManagedBean没有@Inherited.javax.faces.ManagedBean具有.检查你的进口.

此外,我不会依赖于此.我没有看到它在规范中定义,但通常使用jsf托管bean继承是一个坏主意.即使你拥有它,你也应该有一个抽象的基类,它具有通用功能,但它本身不是托管bean.

另一件事 - 如果你没有bean上的注释,稍后阅读代码会更难.可能需要一段时间,直到读者意识到它是继承的.

所以放上@ManagedBean每个bean,不要过度使用继承.

  • 我正在使用“javax.faces.bean.ManagedBean”来注释“ParentBean”。`ChildBean` 不继承此注释。 (2认同)

Ste*_*han 5

在阅读了这个问题并阅读了一点 Mojarra 的源代码(参见问题)之后,我认为 Mojarra 可能实际上并没有彻底扫描类(为了加载性能)。

所以我的猜测是,对于一个给定的类,MojarraAnnotationScanner保留在该类上,并且不会扫描同一类的层次结构。

这就是为什么我的ChildBean不被识别为ManagedBean.