2011-07-25 43 views
5

Necesito mostrar todos los valores de una enumeración como elementos <option>. He conseguido usando scriptles:¿Cómo mostrar todos los valores de una enumeración como elementos <option>?

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
    <%@ taglib prefix="errors" tagdir="/WEB-INF/tags/jostens/errors" %> 
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

... 
<% 
     Class<?> c = CarrierCode.class; 
     for (Object carrier : c.getEnumConstants()) { 
      CarrierCode cc = (CarrierCode) carrier; 
      StringBuilder sb = new StringBuilder(); 
      Formatter formatter = new Formatter(sb, Locale.US); 
      out.print(formatter.format("<option value='%s'>%s</option>\n", cc.getMfCode(), cc.name())); 
     } 
%> 
... 

Sin embargo, me gustaría ponerlo en práctica usando JSTL código/EL lugar. ¿Cómo puedo hacerlo?

ACTUALIZACIÓN:

primavera tiene una forma mucho más fácil de hacer esto ahora. Primero agregue las etiquetas de trabajo del marco de resorte <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> y si acaba de declarar un seleccionar donde la variable en la ruta es Enum, primavera encuentra automágicamente los otros elementos.

<form:select path="dataFormat.delimiter" class="dataFormatDelimiter"> 
    <form:options items="${dataFormat.delimiter}"/> 
</form:select> 
+0

@BalusC Gracias por la edición mucho más clara ahora. – kasdega

+1

Posible duplicado de [iteración sobre constantes Enum en JSP] (http://stackoverflow.com/questions/141611/iterating-over-enum-constants-in-jsp) – Stewart

Respuesta

7

crear una implementación ServletContextListener que pone los valores de enumeración en el ámbito de la aplicación durante el inicio del módulo web para que esté disponible en EL por ${carrierCodes}. Esta clase es reutilizable para todas las demás cosas que quieras hacer una vez durante el inicio de la aplicación.

@WebListener 
public class Config implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     event.getServletContext().setAttribute("carrierCodes", CarrierCode.values()); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
     // NOOP 
    } 

} 

Tenga en cuenta que he usado Enum#values() en lugar del método torpe Class#getEnumConstants(). Devuelve una matriz de todos los valores enum.

Luego, en JSP, simplemente use JSTL<c:forEach> para iterar sobre él.

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
... 
<select name="carrierCode"> 
    <c:forEach items="${carrierCodes}" var="carrierCode"> 
    <option value="${carrierCode.mfCode}">${carrierCode}</option> 
    </c:forEach> 
</select> 
+0

Lo intentaré. Gracias. – kasdega

+0

Bien, ¡respuesta fantástica! Funciona perfectamente Muchas gracias. – kasdega

+0

De nada. – BalusC

Cuestiones relacionadas