Nie ma czegoś takiego jak instanceof
w EL. Możesz jednak (ab) użyć Object#getClass()
i uzyskać dostęp do modułów pobierających z Class
również w EL. Następnie określ wynik w atrybucie składnika rendered
.
<h:panelGroup rendered="#{entity.class.name == 'com.example.PhysicalPerson'}">
<p>According to Class#getName(), this is a PhysicalPerson.</p>
</h:panelGroup>
<h:panelGroup rendered="#{entity.class.simpleName == 'MoralPerson'}">
<p>According to Class#getSimpleName(), this is a MoralPerson.</p>
</h:panelGroup>
Niestandardowa funkcja EL będzie bardziej czyste, jednak. Zauważ, że powyższe nie działa na Tomcat 7 i klonach ze względu na bardzo restrykcyjne ograniczenia dozwolonych właściwości w EL. Java zastrzeżone literały, takie jak class
, nie są już dozwolone. Będziesz potrzebował #{entity['class'].name}
i tak dalej.
Oznacza to, że musisz dodać getter do interfejsu/klasy abstrakcyjnej za każdym razem, gdy tworzysz nową implementację 'Osoby'. Niezbyt przydatne. – BalusC
atrybut boolean można zmienić na dowolny inny. ale zgadzam się, nie jest to najpiękniejsze rozwiązanie. –