2011-07-12 17 views
5

Mam klasę ParentBean, która ma adnotację @ManagedBean. Jeśli podklasuję tę klasę, ChildBean nie dziedziczy adnotacji @ManagedBean, chociaż adnotacja @ManagedBean ma meta-adnotację Inherited.JSF 2 - @ManagedBean nie wykryto

Czego mi brakuje?

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

EDIT: Wciąż szuka rozwiązania ...

Odpowiedz

4

Po przeczytaniu tego question i czytając trochę kodu źródłowego z Mojarra (patrz question), myślę, że nie może w rzeczywistości Mojarra skanować dokładnie klasy (dla wydajność załadunku).

Zgaduję więc, że dla jednej klasy, Mojarra AnnotationScanner pozostaje na tej klasie i nie skanuje hierarchii tej samej klasy.

Dlatego moja ChildBean nie jest rozpoznawana jako ManagedBean.

6

javax.annotation.ManagedBean nie posiada @Inherited. javax.faces.ManagedBean ma. Sprawdź swój import.

Co więcej, nie będę na tym polegać. Nie widzę tego zdefiniowanego w specyfikacji, ale zwykle dziedziczenie z zarządzanym komponentem jsf jest złym pomysłem. Nawet jeśli go masz, powinieneś mieć abstrakcyjną klasę bazową, która ma wspólną funkcjonalność, ale sama nie jest zarządzanym komponentem bean.

Inna sprawa - czytanie kodu później byłoby trudniejsze, jeśli nie masz adnotacji na fasoli. Może minąć trochę czasu, zanim czytelnik zda sobie sprawę, że jest dziedziczony.

Umieść więc na każdej fasoli @ManagedBean i nie nadużywaj dziedziczenia.

+0

Przepraszam, popełniłem błąd. Używam 'javax.faces.bean.ManagedBean'. Ten nie jest dziedziczony. – Stephan

+0

Nie otrzymałem komentarza. – Bozho

+1

Używam 'javax.faces.bean.ManagedBean' do adnotowania' ParentBean'. 'ChildBean' nie dziedziczy tej adnotacji. – Stephan