将ArrayList从servlet传递给JSP

我试图将包含servlet对象的ArrayList传递给JSP。 但

Servlet文件:

request.setAttribute("servletName", categoryList); //categorylist is an arraylist contains object of class category getServletConfig().getServletContext().getRequestDispatcher("/GetCategory.jsp").forward(request,response); 

JSP文件:

 //category class <% Category category = new Category(); //creating arraylist object of type category class ArrayList list = ArrayList(); //storing passed value from jsp list = request.getAttribute("servletName"); for(int i = 0; i  

在servlet代码中,使用指令request.setAttribute("servletName", categoryList) ,将列表保存在请求对象中,并使用名称“servletName”来引用它。
顺便说一句,使用名称“servletName”作为列表是相当混乱的,也许最好称之为“列表”或类似的东西: request.setAttribute("list", categoryList)
无论如何,假设您不更改serlvet代码,并使用名称“servletName”存储列表。 当您到达JSP时,需要从请求中检索列表,为此您只需要request.getAttribute(...)方法。

 <% // retrieve your list from the request, with casting ArrayList list = (ArrayList) request.getAttribute("servletName"); // print the information about every category of the list for(Category category : list) { out.println(category.getId()); out.println(category.getName()); out.println(category.getMainCategoryId()); } %> 

request.getAttribute("servletName")方法将返回需要转换为ArrayList Object

 ArrayList list =new ArrayList(); //storing passed value from jsp list = (ArrayList)request.getAttribute("servletName"); 
  <% ArrayList list = new ArrayList(); list = (ArrayList) request.getAttribute("actors"); %>    Actor   

This is Actor Class

<% for(int i = 0; i < list.size(); i++) { Actor actor = new Actor(); actor = list.get(i); //out.println(actor.getId()); //out.println(actor.getFirstname()); //out.println(actor.getLastname()); %> <% }; %>
Id First Name Last Name
<%=actor.getId()%> <%=actor.getFirstname()%> <%=actor.getLastname()%>

可能的错误是……
1.您从会话中的servelt设置数组列表,而不是在请求中设置。
2.您设置的数组为空。
3.您重定向页面而不是转发它。

你也不应该在jsp中初始化listcategory 。 尝试这个。

 for(Category cx: ((ArrayList)request.getAttribute("servletName"))) { out.println( cx.getId()); out.println(cx.getName()); out.println(cx.getMainCategoryId() ); } 
 public class myActorServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String name; private String user; private String pass; private String given_table; private String tid; private String firstname; private String lastname; private String action; @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); // connecting to database Connection con = null; Statement stmt = null; ResultSet rs = null; PrintWriter out = response.getWriter(); name = request.getParameter("screenName"); user = request.getParameter("username"); pass = request.getParameter("password"); tid = request.getParameter("tid"); firstname = request.getParameter("firstname"); lastname = request.getParameter("lastname"); action = request.getParameter("action"); given_table = request.getParameter("tableName"); out.println(""); out.println(""); out.println("Servlet JDBC"); out.println(""); out.println(""); out.println(""); out.println("

Hello, " + name + "

"); out.println("

Servlet JDBC

"); ///////////////////////// // init connection object String sqlSelect = "SELECT * FROM `" + given_table + "`"; String sqlInsert = "INSERT INTO `" + given_table + "`(`firstName`, `lastName`) VALUES ('" + firstname + "', '" + lastname + "')"; String sqlUpdate = "UPDATE `" + given_table + "` SET `firstName`='" + firstname + "',`lastName`='" + lastname + "' WHERE `id`=" + tid + ""; String sqlDelete = "DELETE FROM `" + given_table + "` WHERE `id` = '" + tid + "'"; ////////////////////////////////////////////////////////// out.println( "

Reading Table Data...Pass to JSP File...Okay

"); ArrayList list = new ArrayList(); // connecting to database try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/javabase", user, pass); stmt = con.createStatement(); rs = stmt.executeQuery(sqlSelect); // displaying records while (rs.next()) { Actor actor = new Actor(); actor.setId(rs.getInt("id")); actor.setLastname(rs.getString("lastname")); actor.setFirstname(rs.getString("firstname")); list.add(actor); } request.setAttribute("actors", list); RequestDispatcher view = request.getRequestDispatcher("myActors_1.jsp"); view.forward(request, response); } catch (SQLException e) { throw new ServletException("Servlet Could not display records.", e); } catch (ClassNotFoundException e) { throw new ServletException("JDBC Driver not found.", e); } finally { try { if (rs != null) { rs.close(); rs = null; } if (stmt != null) { stmt.close(); stmt = null; } if (con != null) { con.close(); con = null; } } catch (SQLException e) { } } out.println("

"); out.close(); } }

这里列出请求中设置的属性名称request.setAttribute("List",list);ArrayList list=new ArrayList();

 <% ArrayList a=(ArrayList)request.getAttribute("List"); out.print(a); for(int i=0;i