2012-04-03 11 views
15

Używam JSF 2.0. Mam zarządzany komponent bean, do którego mogę uzyskać dostęp za pośrednictwem strony xhtml. Wewnątrz fasoli zadeklarowałem wewnętrzną klasę. Mogę uzyskać dostęp do zarządzanego komponentu ArrayList<String>, ale nie ArrayList<InnerClass> i pojawia się błąd, że klasa InnerClass nie ma właściwości do odczytu. Czy ktoś wie, co jest nie tak?Nie można uzyskać dostępu do klasy wewnętrznej w fasoli

Odpowiedz

30

To może się zdarzyć, jeśli klasa wewnętrzna nie jest public. Będzie wtedy niewidoczny dla innych klas poza pakietem (tak jak sam JSF/EL!). Upewnij się, że klasa wewnętrzna to public, gdy potrzebujesz dostępu do niej przez JSF/EL.

public class Bean { 

    public class InnerClass { 
     // ... 
    } 

} 

przeciwnym razie będzie ona interpretowana jako String a dostaniesz mylące wyjątki jak

javax.el.ELException: /test.xhtml: Własność 'someProperty' nie czytelny od typu java.lang .String

jeśli chcesz uzyskać dostęp do #{innerClass.someProperty}.

+1

Znalazłem to po 2 godzinach szukania błędu. Sądzę, że powinni przynajmniej uczynić wyjątek bardziej przejrzystym. Ciąg tutaj odnosi się do oczekiwanego typu (w moim przypadku był to boolean), co jest naprawdę mylące. – NeplatnyUdaj

Powiązane problemy