¿Cómo recorrer un HashMap en JSP?
¿ Cómo puedo recorrer un HashMap
JSP?
<%
HashMap<String, String> countries = MainUtils.getCountries(l);
%>
<select name="country">
<%
// Here I need to loop through countries.
%>
</select>
De la misma manera que lo haría en el código Java normal.
for (Map.Entry<String, String> entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
Sin embargo , los scriptlets (código Java sin formato en archivos JSP, esas <% %>
cosas) se consideran una mala práctica . Recomiendo instalar JSTL . Tiene una <c:forEach>
etiqueta que puede iterar entre otras Map
. Cada iteración le dará un Map.Entry
respaldo que a su vez tiene getKey()
métodos getValue()
.
Aquí hay un ejemplo básico:
<%@ taglib prefix="c" uri="jakarta.tags.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="jakarta.tags.core" %>
<select name="country">
<c:forEach items="${countries}" var="country">
<option value="${country.key}">${country.value}</option>
</c:forEach>
</select>
Necesita a Servlet
o a ServletContextListener
para colocar el ${countries}
en el alcance deseado. Si se supone que esta lista está basada en solicitudes, utilice Servlet
's doGet()
:
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 ServletContextListener
's contextInitialized()
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 countries
estará disponible en EL antes de ${countries}
.
Ver también:
- Iterar sobre elementos de Lista y Mapa usando la etiqueta JSTL <c:forEach>
- Cómo iterar sobre un mapa anidado en <c:forEach>
- ¿Cómo iterar un ArrayList dentro de un HashMap usando JSTL?
- Uso de un servlet de inicio automático especial para inicializar al inicio y compartir datos de la aplicación