How to display a list in a .JSP file?

java, jsp, jstl, resultset, servlets

Solution

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>

This exception occur when your `<c:forEach items>` does not refer to an Object, that can be iterated upon. The Object should either be `Iterable`, a `Map`, or an array. So clearly, your list attribute refers to the type which does not come under any of the above category. Though the type is actually a `List`, but not `java.util.List`.

Check your import statement:

import java.awt.List;   // Here is the fault

It should be:

import java.util.List;

Also, you should use generic type `List` instead of raw type. Change:

List list = new List();

to:

List<String> list = new List<String>();

Also, it seems like you are doing the pre-processing task in `doPost()` method. Don't. `doPost()` is used for post-processing a request. You should use `doget()` method for pre-processing.

Move all your code in `doPost()` to `doGet()` method.

Problem

After an hour of solid research I still can't do this. This is my Servlet code: ``` package com.fdm.ProjectWeb.RedirectServlets; import java.awt.List; import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.spi.DirStateFactory.Result; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.jstl.sql.ResultSupport; import com.fdm.ProjectWeb.Controller.ValidateRegisterInputController; import com.fdm.ProjectWeb.Model.OraclePullListOfUsers; import com.fdm.ProjectWeb.Model.OracleUserManagement; public class VerifyRedirect extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{ OraclePullListOfUsers pull = new OraclePullListOfUsers(); ResultSet rs = pull.unverifiedUsers(); List list = new List(); try { while (rs.next()){ list.add(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); } req.setAttribute("list", list); RequestDispatcher rd = req.getRequestDispatcher("./WEB-INF/VerifyUser.jsp"); rd.forward(req, resp); } } ``` And this is my .JSP code: ``` <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>Verify Users</title> </head> <body> <table> <c:forEach items="${list}" var="item"> <tr> <td><c:out value="${item}" /></td> </tr> </c:forEach> </table> <h2>Please enter the Username of the user you want to verify</h2> <form action="loginform" method="POST"> <label>User To Verify: <input type="text" name="userToVerify" id="userToVerify" /></label><br /> <input type="submit" value="Submit" name="submit" /> </form> </body> ``` The Result Set definitely has data in it as if I system.out.println in the while loop it shows all the right values. And I get this error message: ``` javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; ``` Any help would be appreciated!

Original source

Related problems