Se podría comparar Class#getName()
o, tal vez mejor, Class#getSimpleName()
a un String
.
<h:link rendered="#{model['class'].simpleName eq 'ClassA'}">
#{errorMessage1}
</h:link>
<h:link rendered="#{model['class'].simpleName eq 'ClassB'}">
#{errorMessage2}
</h:link>
nota la importancia de especificar Object#getClass()
con la paréntesis de la notación ['class']
porque class
se reservó un literal de Java que de otro modo una excepción en EL EL 2.2+.
La alternativa segura de tipo es agregar algo de public enum Type { A, B }
junto con public abstract Type getType()
a la clase de base común del modelo.
<h:link rendered="#{model.type eq 'A'}">
#{errorMessage1}
</h:link>
<h:link rendered="#{model.type eq 'B'}">
#{errorMessage2}
</h:link>
Cualquier valor no válido arrojaría aquí una excepción EL durante el tiempo de ejecución en EL 2.2+.
no funcionaría para interfaces ... ¿alguna sugerencia para eso? – Lucas
@Lucas: es imposible si la implementación es una interfaz :) Si tiene un problema, es causado por otra cosa. – BalusC
La sugerencia de prueba de cadena de clases es útil en algunas situaciones, pero no funciona para interfaces o subclases. Existe una necesidad real y urgente de instanceof. Por favor vote aquí: http://java.net/jira/browse/JSP_SPEC_PUBLIC-113. Véase también el problema relacionado, cómo llamar a un componente compuesto vinculado a un tipo solo para un tipo coincidente utilizando algún tipo de prueba que no sea 'renderizado', que no parece funcionar durante la fase de construcción (observaciones en la parte inferior de http: // stackoverflow. com/questions/16665705/jsf-how-prevent-stackoverflow-due-to-recursion-during-build-phase-despite-rend) –