martes, 6 de marzo de 2012

Acceder a un tipo enumerado con JSTL

Bueno, como no, en mi día a día hoy me he visto forzado a usar un tipo enumerado con JSTL. El problema es que si usas la siguiente sentencia no funciona:
<c:if test="${consulta.estado eq EstadoConsulta.PENDIENTE">...</c:if>
Solución, guardarse los valores en el pageContext y usarlos mas tarde:
<% pageContext.setAttribute("pendiente", EstadoConsulta.PENDIENTE); %>
<c:if test="${consulta.estado eq pendiente}"/>...</c:if>
Otra solución que he visto es esta otra si tenemos un tipo enumerado tuneado:
public enum EstadoConsulta {
  PENDIENTE(1, "Pendiente"),
  LEIDA(2, "Leida");
 
  private int value;
  private String text;
  private static final Map typesByValue = new HashMap();

  static {
    for (EstadoConsulta type : EstadoConsulta.values())
      typesByValue.put(type.value, type);
  }

  private EstadoConsulta(int value, String text) {
    this.value = value;
    this.text = text;
  }

  public int getValue() { return value; }
 
  public String getText() { return text; }
 
  public static Map getMapValues() {
    return EstadoConsulta.typesByValue;
  }
}
Podremos hacer lo siguiente en nuestro JSP con JSTL:
<% pageContext.setAttribute("estados", EstadoConsulta.getMapValues()); %>
<c:out value="${estados[consulta.estado].text}" />

No hay comentarios:

Publicar un comentario en la entrada