Como percorrer um HashMap no JSP?

Como posso percorrer um HashMap no JSP?

 <% HashMap countries = MainUtils.getCountries(l); %>    

Da mesma forma que você faria no código Java normal.

 for (Map.Entry entry : countries.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); // ... } 

No entanto , os scriptlets (código Java bruto em arquivos JSP, aquelas coisas < % %> ) são considerados uma prática ruim . Eu recomendo instalar o JSTL (apenas descarte o arquivo JAR em /WEB-INF/lib e declare os taglibs necessários na parte superior do JSP). Tem uma tag que pode iterar entre outros Map . Cada iteração lhe dará um Map.Entry volta, que por sua vez, tem methods Map.Entry getKey() e getValue() .

Aqui está um exemplo básico:

 < %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  Key = ${entry.key}, value = ${entry.value}

Assim, seu problema específico pode ser resolvido da seguinte maneira:

 < %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

Você precisa de um Servlet ou um ServletContextListener para colocar o ${countries} no escopo desejado. Se esta lista deveria ser baseada em pedidos, então use o doGet() do Servlet :

 protected void doGet(HttpServletRequest request, HttpServletResponse response) { Map countries = MainUtils.getCountries(); request.setAttribute("countries", countries); request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response); } 

Ou se essa lista for uma constante de todo o aplicativo, use contextInitialized() ServletContextListener para que ela seja carregada apenas uma vez e mantida na memory:

 public void contextInitialized(ServletContextEvent event) { Map countries = MainUtils.getCountries(); event.getServletContext().setAttribute("countries", countries); } 

Em ambos os casos, os countries estarão disponíveis em EL por ${countries} .

Espero que isto ajude.

Veja também:

  • Iterar sobre elementos de List e Map usando a tag JSTL
  • Como iterar em um mapa nested em
  • Como iterar um ArrayList dentro de um HashMap usando JSTL?
  • Usando o servlet de início automático especial para inicializar na boot e compartilhar dados do aplicativo

Dependendo do que você deseja realizar dentro do loop, repita um destes:

  • countries.keySet()
  • countries.entrySet()
  • countries.values()