点击添加购物车报错

点击添加购物车报错

http://img1.sycdn.imooc.com//climg/5bed24b60001da8519101022.jpg

相关的代码:

package com.imooc.cart.data;

public class Cart {
    private long id;
    private long productID;
    private String name;
    private int price;
    private int count;
    private int totalprice;

    public Cart(long id, long productID, String name, int price, int count) {
        this.id = id;
        this.productID = productID;
        this.name = name;
        this.price = price;
        this.count = count;
    }

    public long getId() {
        return id;
    }

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

    public long getProductID() {
        return productID;
    }

    public void setProductID(long productID) {
        this.productID = productID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getTotalprice() {
        return totalprice;
    }

    public void setTotalprice(int totalprice) {
        this.totalprice = totalprice;
    }
    //数量加一的方法
    public void incrCount(){
        count++;
        this.totalprice=price*count;
    }
    //数量减一的方法
    public boolean decrCount(){
        count--;
        this.totalprice=price*count;
        if(0==count){
            return true;
        }
        return false;
    }
}
package com.imooc.cart.data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 本地缓存
 */
public class LocalCache {
    private static Map<Long,Product> productMap=new HashMap<>();
    private static Map<Long,Cart> cartMap=new HashMap<>();

    static {
        productMap.put(1l, new Product(1l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(2l, new Product(2l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(3l, new Product(3l, "JAVA", "JAVA基础课程-基本语法", "介绍java基本语法特性及编写规范", "初级", 219));
        productMap.put(4l, new Product(4l, "JAVA", "JAVA基础课程-JDBC", "介绍JDBC方式连接数据库", "初级", 219));
        productMap.put(5l, new Product(5l, "JAVA", "JAVA基础课程—Socket", "介绍Java网络编程Socket", "初级", 219));
        productMap.put(6l, new Product(6l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(7l, new Product(7l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(8l, new Product(8l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(9l, new Product(9l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(10l, new Product(10l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(11l, new Product(11l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(12l, new Product(12l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(13l, new Product(13l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(14l, new Product(14l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(15l, new Product(15l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(16l, new Product(16l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(17l, new Product(17l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(18l, new Product(18l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(19l, new Product(19l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(20l, new Product(20l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(21l, new Product(21l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(22l, new Product(22l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(23l, new Product(23l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(24l, new Product(24l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
        productMap.put(25l, new Product(25l, "HTML/CSS", "HTML+CSS基础课程", "HTML+CSS基础教程8小时带领大家步步深入学习标签用法和意义", "初级", 219));
    }
    public static List<Product> getProducts(){
        return new ArrayList<>(productMap.values());
    }
    public static List<Cart> getCarts(){
        return new ArrayList<>(cartMap.values());
    }

    public static Product getProduct(Long id){
        return productMap.get(id);
    }
    public static void incrCart(Long productID){
        cartMap.get(productID).incrCount();
    }

    public static void decrCart(Long productID){

    }
    //加入到购物车的方法
    public static void addCart(Product product){
        if(!cartMap.containsKey(product.getId())){
            cartMap.put(product.getId(),new Cart(product.getId(),product.getId(),product.getName(),product.getPrice(),1));
        }else{
            incrCart(product.getId());
        }
    }
}
package com.imooc.cart.servlet;

import com.imooc.cart.data.LocalCache;
import com.imooc.cart.data.Product;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Objects;

public class CartServlet extends HttpServlet {
    @Override
    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        if(Objects.equals("/cart/cart.do",req.getServletPath())){
            String productID=req.getParameter("productID");
            if(null!=productID){
                Product product= LocalCache.getProduct(Long.valueOf(productID));
                LocalCache.addCart(product);
            }
            res.sendRedirect("/cart/list.do");
        }else if(Objects.equals("/cart/list.do",req.getServletPath())){
            req.setAttribute("carts",LocalCache.getCarts());
            req.getRequestDispatcher("/WEB-INF/views/biz/cart.jsp").forward(req,res);
        }
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>购物车</title>
    <link rel="stylesheet" href="../../../css/shopcar.css">
</head>
<body>
<!-- header区域 -->
<header class="header">
    <div class="logo"></div>
    <div class="nav">
        <a href="/product/list.do" class="nav__item">课程</a>
        <a href="" class="nav__item nav__item_icon_new">职业路径<i class="icon_new"></i></a>
        <a href="" class="nav__item">实战</a>
        <a href="" class="nav__item">猿问</a>
        <a href="" class="nav__item">手记</a>
    </div>
    <div class="profile">
        <a href="/cart/list.do" class="profile__item profile__car"></a>
        <a href="/browse/list.do" class="profile__item profile__message"></a>
        <a href="" class="profile__item profile__ava"></a>
    </div>
    <div class="search"><input type="text" class="search_input"><a href="" class="search_submit"></a></div>
</header>
<!-- banner区域 -->
<div class="banner">
    <div>我的购物车</div>
</div>
<!-- goods区域 -->
<form action="/cart/settlement.do" id="cartBody">
    <div class="cart-panel">
        <div class="hd">
            <ul class="order-title">
                <li><input type="checkbox" class="check-all"><span>全选</span></li>
                <li class="product">商品名称</li>
                <li class="total-price">总价</li>
                <li class="unit-price">单价</li>
                <li class="number">数量</li>
                <li class="operate">操作</li>
            </ul>
        </div>
        <div class="bd">
            <!-- 购物车列表 -->
            <c:forEach items="${carts}" var="cart">
                <ul class="order-list">
                    <li><input type="checkbox" class="check" checked ></li>
                    <input type="hidden" name="carts" value="${cart.id}">
                    <li class="img-box">
                        <a href="http://www.imooc.com">
                            <img src="../../../img/g1.jpg" alt="">
                        </a>
                    </li>
                    <li class="product">
                        <a href="http://www.imooc.com">
                            <span>${cart.name}-${cart.id}</span>
                        </a>
                    </li>
                    <li class="total-price">
                        <span class="price-sign"></span>
                        <span class="price-num"><fmt:formatNumber value="${cart.totalPrice}" type="currency"/></span>
                    </li>
                    <li class="unit-price">
                        <span class="price-sign"></span>
                        <span class="price-num"><fmt:formatNumber value="${cart.price}" type="currency"/></span>
                    </li>
                    <li class="number">
                        <div class="input-num">
                            <a href="/cart/decr.do?productId=${cart.productId}">-</a>
                            <input type="text" value="${cart.count}" class="num">
                            <a href="/cart/incr.do?productId=${cart.productId}">+</a>
                        </div>
                    </li>
                    <li class="operate"><a href="/cart/delete.do?productId=${cart.id}">删除</a></li>
                </ul>
            </c:forEach>
        </div>
    </div>
    <!-- 结算栏 -->
    <div class="pay-bar">
        <%--<div class="pay-info">--%>
        <%--<div class="price">--%>
        <%--<span class="price-sign">¥</span>--%>
        <%--<span class="price-num pay-money"></span>--%>
        <%--</div>--%>
        <%--<span>应付金额:</span>--%>
        <%--</div>--%>
        <button>去结算</button>
    </div>
</form>
<!-- footer区域 -->
<footer class="footer">
    <div class="waper">
        <div class="footerWaper">
            <div class="followus">
                <a href="" class="followus_weixin"><div class="flw-weixin-box"></div></a>
                <a href="" class="followus_weibo"></a>
                <a href="" class="followus_qzone"></a>
            </div>
            <div class="footer_intro">
                <div class="footer_link">
                    <ul>
                        <li><a href="">网站首页</a></li>
                        <li><a href="">企业合作</a></li>
                        <li><a href="">人才招聘</a></li>
                        <li><a href="">联系我们</a></li>
                        <li><a href="">讲师招募</a></li>
                        <li><a href="">常见问题</a></li>
                        <li><a href="">意见反馈</a></li>
                        <li><a href="">慕课大学</a></li>
                        <li><a href="">友情链接</a></li>
                    </ul>
                </div>
                <p>Copyright © 2017 imooc.com All Rights Reserved | 京ICP备 13046642号-2</p>
            </div>
        </div>
    </div>
</footer>
</body>
<script src="./js/shopcar.js"></script>
</html>


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

你好,测试了你的代码确实是无法显示,具体原因如下:

如下图所示,在list.jsp页面中你传递的参数键值为productId.

http://img1.sycdn.imooc.com//climg/5bee7214000187ef06090146.jpg

而你在CartServlet中接收的键值为productID所以无法显示数据,

http://img1.sycdn.imooc.com//climg/5bee72730001b65807900222.jpg

另外建议同学如果想测试哪个功能的话,可以自己跟踪一下参数的值,譬如这个问题,你可以在CartServlet中打印一下productID的值,如果为null就证明是前后台数据传输出了问题,自己解决bug对程序员提高水平是很重要的哦,祝学习愉快~

chrismorgen 2018-11-16 10:08:45

同学是指什么没有反应呢?是将商品添加到购物车之后,点击去结算没有反应吗?如果是,你的CartServlet中并没有写结算的处理逻辑,所以你点击去结算也是没有反应的,建议同学可以根据课程内容来完成结算的请求处理逻辑,然后再试一试,如果有什么不明白的地方可以再次提问哦,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5bee26300001dab207960432.jpg

  • 提问者 精慕门6573819 #1
    不是,还没写到结算那一步,这个界面是点击添加购物车之后跳转的界面,商品没有在购物车里显示出来
    2018-11-16 11:00:23
提问者 精慕门6573819 2018-11-16 08:41:33
chrismorgen 2018-11-15 17:17:11

你好同学,截图中的报错是没有问题的,如下图所示,是找不到shopcar.js文件了,在项目中是没有给出js文件的。

http://img1.sycdn.imooc.com//climg/5bed39390001c5a117980143.jpg

同学可以将下图标记的代码注释掉就可以了,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5bed397000015b9103690132.jpg

  • 提问者 精慕门6573819 #1
    老师,注释掉这行代码不报错了,但还是没有反应。
    2018-11-16 08:40:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师