instanceof check in EL expression language
el, instanceof, jsf
Solution
You could compare `Class#getName()` or, maybe better, `Class#getSimpleName()` to a `String`.
<h:link rendered="#{model['class'].simpleName eq 'ClassA'}">
#{errorMessage1}
</h:link>
<h:link rendered="#{model['class'].simpleName eq 'ClassB'}">
#{errorMessage2}
</h:link>
Note the importance of specifying `Object#getClass()` with brace notation `['class']` because `class` is a reserved Java literal which would otherwise throw an EL exception in EL 2.2+.
The type safe alternative is to add some `public enum Type { A, B }` along with `public abstract Type getType()` to the common base class of the model.
<h:link rendered="#{model.type eq 'A'}">
#{errorMessage1}
</h:link>
<h:link rendered="#{model.type eq 'B'}">
#{errorMessage2}
</h:link>
Any invalid values would here throw an EL exception during runtime in EL 2.2+.
In case you're using OmniFaces, since version 3.0 you could use `#{of:isInstance()}`.
<h:link rendered="#{of:isInstance('com.example.ClassA', model)}">
#{errorMessage1}
</h:link>
<h:link rendered="#{of:isInstance('com.example.ClassB', model)}">
#{errorMessage2}
</h:link>
Problem
Is there a way to perform an `instanceof` check in EL? E.g. ``` <h:link rendered="#{model instanceof ClassA}"> #{errorMessage1} </h:link> <h:link rendered="#{model instanceof ClassB}"> #{errorMessage2} </h:link> ```