问题的解决方法">

Don't know how to iterate over supplied "items" in 问题的解决方法

曾经碰到如下错误:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know 
how to iterate over supplied "items" in <forEach>
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


后来经过检查代码,发现是在JSP文件中,JSTL的标签  里的items属性被赋予了一个无法遍历的对象。下面是重现此问题的代码:


User.java

package zc.csdn;

import java.util.List;
import java.util.ArrayList;
import java.io.Serializable;

public class User implements Serializable{

	/**
	 * 序列化ID
	 */
	private static final long serialVersionUID = 775564552573359116L;
	
	/**
	 * 主键ID
	 */
	private Integer id;
	
	/**
	 * 用户名
	 */
	private String userName;
	
	/**
	 * 书单
	 */
	private List books = new ArrayList();
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public List getBooks() {
		return books;
	}
	public void setBooks(List books) {
		this.books = books;
	}
}

Book.java

package zc.csdn;

import java.io.Serializable;

public class Book implements Serializable {

	/**
	 * 序列化ID
	 */
	private static final long serialVersionUID = -5329749254581235038L;

	/**
	 * 主键ID
	 */
	private Integer id;
	
	/**
	 * 书名
	 */
	private String bookName;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
}

index.jsp

<%@ page language="java" import="java.util.*,zc.csdn.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

User user = new User();
user.setId(1);
user.setUserName("lisi");

Book book1 = new Book();
book1.setId(1);
book1.setBookName("孙子兵法");

Book book2 = new Book();
book2.setId(2);
book2.setBookName("百万英镑");

List books = new ArrayList();
books.add(book1);
books.add(book2);

user.setBooks(books);

request.setAttribute("user", user);
%>



  
    
    
    My JSP 'index.jsp' starting pagesfsdf
	
	
	    
	
	
	
  
  
  
    用户${user.userName}的书单。 
书名
${item.bookName}

由于index.jsp里的    里的 items 被赋予了 user 这个无法遍历的对象,导致出现文章一开始提到的错误。

如果要改正这个错误,只需把那一行改成       即可。由于 user.book  是一个 List ,所以 可以正常遍历它。






你可能感兴趣的:(Don't know how to iterate over supplied "items" in 问题的解决方法)