moummm
2017-08-27 18:38
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="com.bean.Item" %> <%@ page import="com.dao.ItemsDao" %> <%@ page import="java.util.List" %> <html> <head> <title>商品列表</title> <style type="text/css"> div{ float:left; margin: 10px; } div dd{ margin:0px; font-size:10pt; } div dd.dd_name { color:blue; } div dd.dd_city { color:#000; } </style> </head> <body> <h1>商品展示</h1> <hr> <center> <table width="750" height="60" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <!-- 商品循环开始 --> <% ItemsDao itemsDao = new ItemsDao(); List<Item> items = itemsDao.getItems(); Item item = null; if (items!=null&&items.size()>0) { for (int i =0;i<items.size();i++){ item = items.get(i); %> <div> <dl> <dt> <a href="details.jsp?id=<%=item.getId()%>"><img src="images/<%=item.getPicture()%>" width="120" height="90" border="1"/></a> </dt> <dd class="dd_name"><%=item.getName() %></dd> <dd class="dd_city">产地:<%=item.getCity() %> 价格:¥ <%=item.getPrice() %></dd> </dl> </div> <!-- 商品循环结束 --> <% } } %> </td> </tr> </table> </center> </body> </html>
public class Item { private int id; // 商品编号 private String name; // 商品名称 private String city; // 产地 private int price; // 价格 private int number; // 库存 private String picture; // 商品图片 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } }
public class ItemsDao { public List<Item> getItems() { Connection conn = null; Item item = null; ResultSet rs =null; List<Item> items = new ArrayList<Item>(); conn = DBHelper.getConn(); String sql = " select * from items "; PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()){ item.setId(rs.getInt("id")); item.setName(rs.getString("name")); item.setCity(rs.getString("city")); item.setNumber(rs.getInt("number")); item.setPicture(rs.getString("picture")); item.setPrice(rs.getInt("price")); items.add(item); item = null; } } catch (Exception e) { e.printStackTrace(); return null; }finally { // 释放数据集对象 if (rs != null) { try { rs.close(); rs = null; } catch (Exception ex) { ex.printStackTrace(); } } // 释放语句对象 if (ps != null) { try { ps.close(); ps = null; } catch (Exception ex) { ex.printStackTrace(); } } } return items; } public Item getItem( int id) { Connection conn = null; Item item = null; ResultSet rs =null; conn = DBHelper.getConn(); String sql = " select * from items WHERE id = ? "; PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); ps.setInt(1,id); rs = ps.executeQuery(); if(rs.next()){ item.setId(rs.getInt("id")); item.setName(rs.getString("name")); item.setCity(rs.getString("city")); item.setNumber(rs.getInt("number")); item.setPicture(rs.getString("picture")); item.setPrice(rs.getInt("price")); return item; }else return null; } catch (Exception e) { e.printStackTrace(); return null; }finally { // 释放数据集对象 if (rs != null) { try { rs.close(); rs = null; } catch (Exception ex) { ex.printStackTrace(); } } // 释放语句对象 if (ps != null) { try { ps.close(); ps = null; } catch (Exception ex) { ex.printStackTrace(); } } } } }
public class DBHelper { private static Connection conn; static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConn(){ if (conn==null) try { conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "2503391049"); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void main(String[] args) { Connection connection = getConn(); if (connection!=null) System.out.println("连接成功"); else System.out.println("连接失败"); } }
你的 ItemsDao类中的 getItems()方法中的 item你创建的时候写的是:“Item item = null;”这样你给 item实例 的属性赋值调用 Item类 的方法的时候,系统认不出来这个 item引用 是 Item类型 的,所以无法赋值会直接报错,导致程序并没有执行,所以你的 items数组 中其实什么也没加进去是空的;
所以你的创建item是应该调用 Item类的构造方法:“Item item = new Item();”,这样系统才可以认出这个 item引用 是 Item类型 的引用;
另外while循环中最后一行,你把item引用置为空了而且又没有新创建一个 Item类型的实例,这样你第二次执行循环会出同样的错,而 ArrayList的add 存的只是对象的引用,并不是把对象内容重新copy一份再把新引用存进去,如果引用所指向的实例内容发生变化的话,ArrayList中引用指向的实例内容也随之发生变化。
所以 你应该把 item实例 的创建写进循环内部,每次循环都创建一个 item新实例,再进行赋值并添加到 items数组 中;
如果不是每次循环每次新建的话,你最后 items数组 中存的其实是同一个item的引用,也就是说虽然有十条绳子,但是牵的是一条狗。最终会导致 items数组 中的内容都一样,页面里显示的是同一个商品,只不过显示了十个。
你index.jsp中 item的创建 写的也是 Item item = null;
你 index.jsp 第一行的写法和文件导入的写法,不清楚你写的对不对,可以参考看下老师的:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%@ page import="entity.Items"%>
<%@ page import="dao.ItemsDAO"%>
你数据库里有数据么?
JAVA遇见HTML——JSP篇
248276 学习 · 3198 问题
相似问题