【问题标题】:JSF 2 - @ManagedBean not detectedJSF 2 - 未检测到 @ManagedBean
【发布时间】:2011-10-03 10:34:13
【问题描述】:

我有一个 ParentBean 类,它有 @ManagedBean 注释。如果我对这个类进行子类化,ChildBean 不会继承 @ManagedBean 注释,尽管 @ManagedBean 注释具有元注释 Inherited

我错过了什么?

JSF 2.0 莫哈拉 2.0.6 | JBoss 5.1.0.GA Eclipse Indigo - 内部版本号:20110615-0604

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

【问题讨论】:

    标签: java web-applications jsf


    【解决方案1】:

    javax.annotation.ManagedBean 没有@Inheritedjavax.faces.ManagedBean 有。检查您的导入。

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

    另一件事 - 如果您在 bean 上没有注释,以后阅读代码会更加困难。读者可能需要一段时间才能意识到它是继承的。

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

    【讨论】:

    • 对不起,我弄错了。我使用javax.faces.bean.ManagedBean。这个不是继承的。
    • 我使用javax.faces.bean.ManagedBean来注释ParentBeanChildBean 不继承此注解。
    【解决方案2】:

    在阅读了question 并阅读了一点来自 Mojarra 的源代码(请参阅 question)之后,我认为 Mojarra 可能实际上并没有彻底扫描类(对于加载性能)。

    所以我的猜测是,对于一个给定的类,Mojarra AnnotationScanner 停留在这个类上,它不会扫描同一个类的层次结构。

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

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 2012-12-18
      • 1970-01-01
      • 2018-09-28
      • 2013-04-01
      • 1970-01-01
      • 2014-08-05
      • 2012-02-07
      • 1970-01-01
      相关资源
      最近更新 更多