Lets see how we can use JSTL to iterate List, Map, Map of List and List of Map. Below are the tested JSP codes, directly you can run below JSPs and see the outputs.
Note : The JSTL tag library needs jstl-1.2.jar in application's classpath. To download jstl-1.2.jar, click here
1. List
Lets see how to iterate List using JSTL forEach loop. Using below code you can iterate ArrayList, Vector or LinkedList.
2. Map
Iterate Maps like HashMap, Hashtable, TreeMap or LinkedHashMap.
3. List of Map
How to Iterate List of Map ?
4. Map of List
Iterate Map of List
Note: You may get below exceptions if you do not provide proper value in items section.
Note : The JSTL tag library needs jstl-1.2.jar in application's classpath. To download jstl-1.2.jar, click here
1. List
Lets see how to iterate List using JSTL forEach loop. Using below code you can iterate ArrayList, Vector or LinkedList.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page import="java.util.ArrayList"%> <% ArrayList<String> list = new ArrayList<String>(); list.add("val1"); list.add("val2"); list.add("val3"); request.setAttribute("MyList", list); %> <html> <body> <c:forEach items="${MyList}" var="listItem"> ${listItem} <br/> </c:forEach> </body> </html>
2. Map
Iterate Maps like HashMap, Hashtable, TreeMap or LinkedHashMap.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page import="java.util.Hashtable"%> <% Hashtable<String,String> map = new Hashtable<String,String>(); map.put("key1", "val1"); map.put("key2", "val2"); map.put("key3", "val3"); request.setAttribute("MyMap", map); %> <html> <body> <c:forEach items="${MyMap}" var="mapItem"> ${mapItem.key} ${mapItem.value} <br/> </c:forEach> </body> </html>
3. List of Map
How to Iterate List of Map ?
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page import="java.util.ArrayList"%> <%@ page import="java.util.Hashtable"%> <% ArrayList<Hashtable<String,String>> listOfMap = new ArrayList<Hashtable<String,String>>(); Hashtable<String,String> map; for(int i=0;i<3;i++){ map = new Hashtable<String, String>(); map.put("k1", "value1"+i); map.put("k2", "value2"+i); listOfMap.add(map); } request.setAttribute("listOfMap", listOfMap); %> <html> <body> <c:forEach items="${listOfMap}" var="maps"> <c:forEach items="${maps}" var="mapItem"> ${mapItem.key} ${mapItem.value} <br/> </c:forEach> </c:forEach> </body> </html>
4. Map of List
Iterate Map of List
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page import="java.util.ArrayList"%> <%@ page import="java.util.Hashtable"%> <% Hashtable<String,ArrayList<String>> mapOfList = new Hashtable<String,ArrayList<String>>(); ArrayList<String> list; for(int i=0;i<3;i++){ list = new ArrayList<String>(); list.add("value1"); list.add("value2"); mapOfList.put("key"+i,list); } request.setAttribute("mapOfList", mapOfList); %> <html> <body> <c:forEach items="${mapOfList}" var="list"> <c:forEach items="${list.value}" var="listItem"> ${listItem} <br/> </c:forEach> </c:forEach> </body> </html>
Note: You may get below exceptions if you do not provide proper value in items section.
Stacktrace:] with root cause javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach> at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:274) at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:238) at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155) at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256) at org.apache.jsp.test_jsp._jspx_meth_c_005fforEach_005f1(test_jsp.java:156) at org.apache.jsp.test_jsp._jspx_meth_c_005fforEach_005f0(test_jsp.java:119) at org.apache.jsp.test_jsp._jspService(test_jsp.java:83) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619)