问题遇到的现象和发生背景:
添加购物车,能成功,但是查看购物车却不能显示购物车中商品的信息
问题相关代码:
购物车实体:
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 数据库对应的购物车表
*/
public class Cart implements Serializable {
private static final long serialVersionUID = 1L;
private int cid;
private int uid;
private int pid;
private Product product;
private int cnum = 0; //购车商品数量
private BigDecimal ccount; //购物车小计
public Cart() {
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public int getCnum() {
return cnum;
}
public void setCnum(int cnum) {
this.cnum = cnum;
}
public BigDecimal getCcount() {
BigDecimal pprice =product.getPprice();
if(pprice==null){
return null;
}
BigDecimal bigDecimal = new BigDecimal(cnum );
return pprice.multiply(bigDecimal);
}
public void setCcount(BigDecimal ccount) {
this.ccount = ccount;
}
@Override
public String toString() {
return "Cart{" +
"cid=" + cid +
", uid=" + uid +
", cnum=" + cnum +
", ccount=" + ccount +
'}';
}
}
购物车的实现
@WebServlet("/cart")
public class CartController extends BaseServlet {
public String create(HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, SQLException, InvocationTargetException {
//1.判断是否已经登录
HttpSession session = request.getSession();
User user = (User) session.getAttribute("loginUser");
if (user == null) {
session.setAttribute("msg", "添加购物车必须先登录!");
return Constants.REDIRECT+"/login.jsp";
}
//2.商品的id和用户id
int uid = user.getUid();
String pid = request.getParameter("pid");
CartService cartService = new CartServiceImpl();
cartService.createCart(uid,pid);
return Constants.FORWARD+ "/cartSuccess.jsp";
}
public String show(HttpServletRequest request,HttpServletResponse response) throws IllegalAccessException, SQLException, InvocationTargetException {
//1.判断是否已经登录
HttpSession session = request.getSession();
User user = (User) session.getAttribute("loginUser");
if (user == null) {
session.setAttribute("msg", "添加购物车必须先登录!");
return Constants.REDIRECT+"/login.jsp";
}
//2.获取参数
int uid = user.getUid();
//3.调用业务逻辑进行数据查询
CartService cartService = new CartServiceImpl();
List<Cart> list = cartService.findAll(uid);
request.setAttribute("list", list);
return Constants.FORWARD + "/cart.jsp";
}
数据库访问实现类:
```public class CartDaoImpl implements CartDao {
@Override
public Cart hasCart(int uid, String pid) throws SQLException, InvocationTargetException, IllegalAccessException {
//cart --> product 连接查询 多表查询
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select p.p_name as pname,p.p_id as pid,p.t_id as tid," +
"p.p_time as ptime,p.p_image as pimage,p_state as pstate," +
"p.p_info as pinfo, p.p_price as pprice,c.c_id as cid,c.u_id as uid,c.c_count as ccount," +
"c.c_num as cnum from product p join cart c on p.p_id = c.p_id where" +
" c.u_id = ? and c.p_id = ?;";
Map<String, Object> query = queryRunner.query(sql, new MapHandler(), uid, pid);
if (query == null) {
return null;
}
Cart cart = new Cart();
Product product = new Product();
BeanUtils.populate(cart,query);
BeanUtils.populate(product, query);
cart.setProduct(product);
return cart;
运行结果及报错内容:
系统没有提示错误,但是就是无法获取到数据库里面的购物车商品信息
我的解答思路和尝试过的方法:
我检查过关联数据库是否错误,数据库值是否为空都没有问题
我想要达到的结果:
购物车能获取到商品信息