2011-07-12 21 views
5

私は@ManagedBeanアノテーションを持つParentBeanクラスを持っています。このクラスをサブクラス化すると、ChildBeanは@ManagedBeanアノテーションが継承されませんが、@ManagedBeanアノテーションはメタ注釈Inheritedを持ちます。JSF 2 - @ManagedBeanが検出されない

私には何が欠けていますか?

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

EDIT:はまだ解決策を探してい...

答えて

4

クロサギ科(questionを参照)からソースコードをこのquestionを読んで、少し読んだ後、私はクロサギ科は実際に(ロード性能用)徹底的にクラスをスキャンしないかもしれないと思います。

私の推測では、特定のクラスに対して、Mojarra AnnotationScannerはこのクラスにとどまり、この同じクラスの階層はスキャンされません。

これは私のChildBeanManagedBeanとして認識されない理由です。

6

javax.annotation.ManagedBean@Inheritedを持っていません。 javax.faces.ManagedBeanがあります。輸入品を確認してください。

さらに、私はそれに頼ることはありません。私はそれが仕様で定義されて表示されませんが、通常jsfマネージドBeanで継承は悪い考えです。たとえそれを持っていても、共通の機能を保持する抽象基本クラスを持つ必要がありますが、マネージドBeanはそれ自身ではありません。

もう1つのこと - 後でコードを読むことは、Beanにアノテーションがないと難しくなります。読者がそれが継承されることを理解するまでにはしばらく時間がかかるかもしれない。

したがって、各Beanに@ManagedBeanを入れ、継承を過剰に使用しないでください。

+0

申し訳ありませんが、間違いました。私は 'javax.faces.bean.ManagedBean'を使用します。これは継承されません。 – Stephan

+0

私はコメントを得ていません。 – Bozho

+1

私は 'ParentBean'に注釈を付けるために' javax.faces.bean.ManagedBean'を使用しています。 'ChildBean'はこの注釈を継承しません。 – Stephan