validar tipo nomenclatura herencia estados enum con comportamiento avanzado java jsp enums scriptlet

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; } }