I’m trying to pass an ArrayList iterator to a JSP from a Spring class, but the values aren’t showing up when I use a c:foreach loop. Can anyone help? Here is the important part of my Spring class.
import org.springframework.ui.Model;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import java.util.ArrayList;
public class HelloWorldController implements Controller {
protected final Log logger = LogFactory.getLog(getClass());
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
logger.info("Return View");
ArrayList<RandomNumber> random = new ArrayList<RandomNumber>();
for (int i = 1; i <= 10; i++) {
RandomNumber number = new RandomNumber();
number.setNumber((int) Math.random() * 100);
random.add(number);
}
ModelAndView modelAndView = new ModelAndView("helloworld.jsp");
Model model = (Model) modelAndView.getModel();
model.addAllAttributes(random);
return modelAndView;
}
}
Here is the relevant part of my JSP.
<table>
<c:forEach var="random" items="${random}">
<tr><td>${random.number}</td></tr>
</c:forEach>
</table>
I’d change the line:
to:
You now have a “randoms” attribute in the context (adding the ‘s’ to the name to resolve another issue I believe with the var naming). Then change the jsp to be (note
randomfor the var name avoids overlap withrandomsthe collection):