问题
如何在JSP中循环访问aHashMap?
HashMap countries = MainUtils.getCountries(l);
%>
// Here I need to loop through countries.
%>
#1 热门回答(282 赞)
就像在普通Java代码中一样。
for (Map.Entry entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
但是,scriptlets(JSP文件中的原始Java代码,那些28932294th)被认为是apoor practice。我建议安装JSTL(只需删除/WEB-INF/lib中的JAR文件并在JSP顶部声明所需的taglibs)。它有一个tag,可以迭代Maps。每次迭代都会给你aMap.Entryback,而后者又有getKey()和getValue()方法。
这是一个基本的例子:
Key = ${entry.key}, value = ${entry.value}
因此,你的特定问题可以解决如下:
${country.value}
你需要aServlet或aServletContextListener将${countries}放置在所需范围内。如果此列表应该是基于请求的,那么请使用Servlet的doGet():
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
Map countries = MainUtils.getCountries();
request.setAttribute("countries", countries);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
}
或者,如果此列表应该是应用程序范围的常量,那么使用ServletContextListener的contextInitialized(),它将只加载一次并保存在内存中:
public void contextInitialized(ServletContextEvent event) {
Map countries = MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);
}
在这两种情况下,countries都将在ELby${countries}中提供。
希望这可以帮助。
也可以看看:
使用JSTL 标记迭代List和Map的元素
如何在中迭代嵌套映射
如何使用JSTL迭代HashMap中的ArrayList?
使用特殊的自动启动servlet在启动时初始化并共享应用程序数据
#2 热门回答(1 赞)
根据你想要在循环中完成的内容,迭代其中一个:
countries.keySet()
countries.entrySet()
countries.values()