java - tipo - iterando sobre las constantes de Enum en JSP
tipo enum java (2)
Tengo un Enum como este
package com.example;
public enum CoverageEnum {
COUNTRY,
REGIONAL,
COUNTY
}
Me gustaría iterar sobre estas constantes en JSP sin usar el código scriptlet. Sé que puedo hacerlo con un código scriptlet como este:
<c:forEach var="type" items="<%= com.example.CoverageEnum.values() %>">
${type}
</c:forEach>
¿Pero puedo lograr lo mismo sin scriptlets?
Saludos, Don
Si está utilizando Spring MVC, puede lograr su objetivo con la siguiente bendición sintáctica:
<form:form method="post" modelAttribute="cluster" cssClass="form" enctype="multipart/form-data">
<form:label path="clusterType">Cluster Type
<form:errors path="clusterType" cssClass="error" />
</form:label>
<form:select items="${clusterTypes}" var="type" path="clusterType"/>
</form:form>
donde su atributo de modelo (es decir, bean / entidad de datos a poblar) se denomina clúster y ya ha llenado el modelo con una matriz de valores enum denominada clusterTypes. La parte <form:error>
es muy opcional.
En Spring MVC land, también puede auto-poblar clusterTypes
en su modelo como este
@ModelAttribute("clusterTypes")
public MyClusterType[] populateClusterTypes() {
return MyClusterType.values();
}
Si está utilizando bibliotecas de etiquetas, puede encapsular el código dentro de una función EL. Entonces la etiqueta de apertura se convertiría en:
<c:forEach var="type" items="${myprefix:getValues()}">
EDITAR: En respuesta a la discusión sobre una implementación que funcionaría para múltiples tipos de Enum, esbocé esto:
public static <T extends Enum<T>> Enum<T>[] getValues(Class<T> klass) {
try {
Method m = klass.getMethod("values", null);
Object obj = m.invoke(null, null);
return (Enum<T>[])obj;
} catch(Exception ex) {
//shouldn''t happen...
return null;
}
}