java - objetos - ¿Cómo recorrer un HashMap en JSP?
recorrer hashmap de objetos java (2)
Del mismo modo que lo harías en el código Java normal.
for (Map.Entry<String, String> entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
Sin embargo , scriptlets (código Java sin formato en archivos JSP, esas cosas <% %>
se consideran una práctica deficiente . Recomiendo instalar JSTL (simplemente suelte el archivo JAR en /WEB-INF/lib
y declare los taglibs necesarios en la parte superior de JSP). Tiene una etiqueta <c:forEach>
que puede iterar entre otros Map
s. Cada iteración te dará un Map.Entry
que a su vez tiene los getKey()
y getValue()
.
Aquí hay un ejemplo básico:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${map}" var="entry">
Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>
Por lo tanto, su problema particular se puede resolver de la siguiente manera:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<select name="country">
<c:forEach items="${countries}" var="country">
<option value="${country.key}">${country.value}</option>
</c:forEach>
</select>
Necesita un Servlet
o un ServletContextListener
para colocar los ${countries}
en el alcance deseado. Si se supone que esta lista está basada en solicitud, entonces use el doGet()
del Servlet
:
protected void 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 para toda la aplicación, entonces use el contextInitialized()
ServletContextListener
para que se cargue solo una vez y se mantenga en la memoria:
public void contextInitialized(ServletContextEvent event) {
Map<String, String> countries = MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);
}
En ambos casos, los countries
estarán disponibles en EL por ${countries}
.
Espero que esto ayude.
Ver también:
¿Cómo puedo recorrer un HashMap
en JSP?
<%
HashMap<String, String> countries = MainUtils.getCountries(l);
%>
<select name="country">
<%
// Here I need to loop through countries.
%>
</select>
Dependiendo de lo que quiera lograr dentro del ciclo, itere sobre uno de estos en su lugar:
-
countries.keySet()
-
countries.entrySet()
-
countries.values()