2012-08-09 9 views
5

Con un bucle forEach me gustaría crear celdas de tabla (para una fila) mientras que cada celda contiene un campo de entrada de un formulario. El número de celdas de la tabla siempre está fijo (12). Eso en realidad no es un problema. Sin embargo, aquí viene el desafío: el forEach también debe ingresar un número variable de valores predeterminados en los campos de entrada que deben obtenerse de un Mapa (Largo, Doble).¿Cómo usar la variable de índice de un JSTL para cada ciclo para acceder a una entrada de mapa?

Este es mi (simplificado) intento:

<c:forEach var="number" begin="1" end="12" > 
    <td> 
     <input type="text" value="${requestScope.aMapWithData[number]}" /> 
    </td> 
</c:forEach> 

Pero esto no muestra ningún valor desde el mapa de los campos de entrada. Supongo que el problema es que "number" es de tipo String y no Long. Entonces me pregunto si este problema se puede resolver sin usar scriptlets.

+1

Ver [este hilo] (http://stackoverflow.com/questions/924451/jstl-access-a-map-value-by-key). Especialmente la respuesta aceptada, y [este] (http://stackoverflow.com/a/5474399/1344008) – npe

+0

¡Gracias por la pista! El truco con el molde de tipo implícito funciona muy bien: value = "$ {requestScope.aMapWithData [number + 0]}" – mvk

Respuesta

0

probar este

<c:forEach items="${aMapWithData}" var="mapEntry"> 
    <c:set var="mapKey" value="${mapEntry.key}"></c:set> 
    <c:set var="mapValue" value="${mapEntry.value}"></c:set> 
</c:forEach> 
+0

Estaba equivocado ^^ Esto no funciona, ya que siempre necesito 12 celdas ... – mvk

+0

Necesita para especificar cuáles son las claves posibles en su mapa. – vikas

+0

Las posibles teclas del mapa son números (Long) entre 1 y 12 – mvk

7

¿Qué número que desea mostrar? ¿Es el número de índice de cada entrada de mapa?

<c:forEach items="${aMapWithData}" var="item" varStatus="status"> 
    <td> 
     <c:out value="${status.count}."/> 
     <input type="text" name="${item.key}" value="${item.value}" /> 
    </td> 
</c:forEach> 
+0

No, quiero mostrar el valor real de cada entrada del mapa. También se debe fijar el número de celdas (12). En su solución, la cantidad de celdas depende del número de entradas del mapa. – mvk

+0

Simplemente agregue los atributos 'begin' y' end' en la etiqueta 'forEach'. '' Y obtendrá el comportamiento deseado. – kapand

+0

Lamentablemente, agregar "comenzar" y "finalizar" no ayuda, ya que junto con el atributo "elementos" no especifica el número (fijo) de iteraciones, sino que restringe qué elementos del mapa se incluyen en las iteraciones. – mvk

Cuestiones relacionadas