Por cierto, a HashMapes desordenado por naturaleza. ¿Está seguro de que no necesita TreeMap(clasificación automática por clave) o LinkedHashMap(mantiene el orden de inserción)?
BalusC
Respuestas:
308
De la misma manera que lo haría en un código Java normal.
Sin embargo , los scriptlets (código Java sin procesar en archivos JSP, esas <% %>cosas) se consideran una mala práctica . Recomiendo instalar JSTL (simplemente suelte el archivo JAR /WEB-INF/liby declare los taglibs necesarios en la parte superior de JSP). Tiene una <c:forEach>etiqueta que puede iterar entre otras Map. Cada iteración le dará un Map.Entryrespaldo que a su vez tiene getKey()y getValue()métodos.
Necesita a Servleto a ServletContextListenerpara colocar el ${countries}en el alcance deseado. Si se supone que esta lista está basada en una solicitud, utilice el Servlet's doGet():
protectedvoid doGet(HttpServletRequest request,HttpServletResponse response){Map<String,String> countries =MainUtils.getCountries();
request.setAttribute("countries", countries);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);}
O si se supone que esta lista es una constante de toda la aplicación, use ServletContextListener's' contextInitialized()para que se cargue solo una vez y se guarde en la memoria:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
En ambos casos countries, estará disponible en EL por ${countries}.
@Khue: sí, también puedes poner atributos en la sesión. Solo que no entiendo por qué le gustaría duplicar los datos de toda la aplicación en varias sesiones.
BalusC
Creo que en caso de información basada en la sesión. Gracias por la muy buena explicación.
Khue Vu
Estoy seguro de que la respuesta es obvia, pero, ¿por qué los scriptlets se consideran una mala práctica? En ausencia de JSTL debido al mantenimiento de una aplicación heredada, esta es mi única opción.
Zibbobz
@Zibbobz: el texto "mala práctica" es un enlace. Haz click en eso.
BalusC
1
Dependiendo de lo que desee lograr dentro del ciclo, repita uno de estos en su lugar:
HashMap
es desordenado por naturaleza. ¿Está seguro de que no necesitaTreeMap
(clasificación automática por clave) oLinkedHashMap
(mantiene el orden de inserción)?Respuestas:
De la misma manera que lo haría en un código Java normal.
Sin embargo , los scriptlets (código Java sin procesar en archivos JSP, esas
<% %>
cosas) se consideran una mala práctica . Recomiendo instalar JSTL (simplemente suelte el archivo JAR/WEB-INF/lib
y declare los taglibs necesarios en la parte superior de JSP). Tiene una<c:forEach>
etiqueta que puede iterar entre otrasMap
. Cada iteración le dará unMap.Entry
respaldo que a su vez tienegetKey()
ygetValue()
métodos.Aquí hay un ejemplo básico:
Por lo tanto, su problema particular se puede resolver de la siguiente manera:
Necesita a
Servlet
o aServletContextListener
para colocar el${countries}
en el alcance deseado. Si se supone que esta lista está basada en una solicitud, utilice elServlet
'sdoGet()
:O si se supone que esta lista es una constante de toda la aplicación, use
ServletContextListener
's'contextInitialized()
para que se cargue solo una vez y se guarde en la memoria:En ambos casos
countries
, estará disponible en EL por${countries}
.Espero que esto ayude.
Ver también:
fuente
Dependiendo de lo que desee lograr dentro del ciclo, repita uno de estos en su lugar:
countries.keySet()
countries.entrySet()
countries.values()
fuente
El siguiente código me funciona
Primero definí el
partnerTypesMap
siguiente como en el lado del servidor,después de agregarle valores, agregué el objeto a
model
,Cuando renderizo la página que uso a continuación
foreach
para imprimirlas una por una.fuente