草庐IT

学习笔记——书城项目第五阶段之购物项加号、购物项减号

isDaHua 2023-04-17 原文

2023-01-05

一、设置购物项加号

 (1)找到“+”号的位置,在“cart.html”中的第61行中,添加单击事件,通过“异步”操作来设置

<span class="count" @click="addCount">+</span>

(2)在Vue中新建一个函数

addCount:function(){
    //发送异步请求,对当前购物项的数量进行加1的操作(将当前购物项的图书id传过去)
    event.target.previousElementSibling.name;
    axios({
        method:"post",
        url:"cart",
        params:{
            flag:"addCount",
            id:id
        }
    })
},

(3)在“cart.html”中的第60行代码添加“:name”

<input class="count-num" type="text" v-model="cartItem.count" :name="cartItem.book.bookId">

(4)在“CartServlet.java”中添加函数“addCount”

  protected void addCount(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获得请求参数
        String id = request.getParameter("id");
        //2.获得购物车对象
        HttpSession session = request.getSession();
        Cart cart = (Cart)session.getAttribute("cart");
        //3.调用cart对象中的方法,对购物项的数量进行加1操作
    }

(5)在“Cart.java”中写一个“数量加1”的方法

     /**
     * 对购物项的数量进行加1的操作
     * @param id
     */
    public void addCount(Integer id){
        CartItem item = map.get(id);
        item.setCount(item.getCount()+1);
    }

(6)完善刚刚“CartServlet.java”中的添加函数“addCount”

protected void addCount(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获得请求参数
        String id = request.getParameter("id");
        //2.获得购物车对象
        HttpSession session = request.getSession();
        Cart cart = (Cart)session.getAttribute("cart");
        //3.调用cart对象中的方法,对购物项的数量进行加1操作
        cart.addCount(Integer.parseInt(id));
        //4.后台的数据已经刷新完毕,前台的数据还未刷新,通过调用showCart把前台的数据刷新
        showCart(request,response);
    }

(7)完善刚刚Vue中的函数

addCount:function(){
    //发送异步请求,对当前购物项的数量进行加1的操作(将当前购物项的图书id传过去)
    event.target.previousElementSibling.name;
    axios({
        method:"post",
        url:"cart",
        params:{
            flag:"addCount",
            id:id
        }
    }).then(response=>{
          if(response.data.flag){
          //alert(response.data.resultData[0]);
          //需要将后台传过来的数据,展示在网页上(vue的方式)
          this.cartItems=response.data.resultData[0];
          this.totalCount=response.data.resultData[1];
          this.totalAmount=response.data.resultData[2];
        }
},

(8)结果:刷新服务器后,在弹出的页面中,将一些图书添加到购物车中。点击“购物车”后,将某个书籍的数量加1,在“数量”中点击“+”号后,会发现“金额”、“商品数量”、“总金额”的值会发生变化,说明此时代码OK。

二、购物项减号

  前面的步骤和上面的“购物项加号”类似,后面需要考虑“如果图书的数量是1时,再按减号时,是将这条购物项记录默认删除,还是弹出提示再删除”。

(1)找到减号的位置,在“cart.html”中的第59行中,设置一个点击事件

<span class="count" @click="subtractCount">-</span>

(2)在Vue中创建一个函数

subtractCount:function(){
    //需要获得当前购物项的id
     var id = event.target.nextElementSibling.name;
    axios({
    method:"post",
    url:"cart",
    params:{
        flag:"subtractCount",
        id:id
    }
    })
}

(3)将请求发送到“CartServlet.java”中,在“CartServlet.java”中创建一个方法

  protected void subtractCount(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获得请求参数
        String id = request.getParameter("id");
        //2.获得购物车对象
        HttpSession session = request.getSession();
        Cart cart = (Cart)session.getAttribute("cart");
        //3.调用cart对象中的方法,对购物项的数量进行减1操作
        cart.subtractCount(Integer.parseInt(id));
        //4.后台的数据已经刷新完毕,前台的数据还未刷新,通过调用showCart把前台的数据刷新
        showCart(request,response);
    }

(4)在“Cart.java”中创建一个方法,进行减1操作

  /**
     * 对购物项的数量进行减1的操作
     * @param id
     */
    public void subtractCount(Integer id){
        CartItem item = map.get(id);
        item.setCount(item.getCount()-1);
    }

(5)在“cart.html”中的“subtractCount”函数中判断当前购物项的数量是否为1,分为“不为1”和“为1”两种情况,使用异步操作

 subtractCount:function () {
        //需要获得当前购物项的id
        //当目前购物项的数量为1的话,执行的删除操作,不为1才是减一操作
        //1. 获得到文本框的value属性值
        var count=event.target.nextElementSibling.value;
        var id=event.target.nextElementSibling.name;
        if(count==1){
          //问一下,确定要删除吗?
          if(confirm("确定要删除吗?")){
            //执行删除操作(在发送一个请求删除)
            axios({
              method:"post",
              url:"cart",
              params:{
                flag:"deleteCartItem",
                id:id
              }
            }).then(response=>{
              if(response.data.flag){
              //alert(response.data.resultData[0]);
              //需要将后台传过来的数据,展示在网页上(vue的方式)
              this.cartItems=response.data.resultData[0];
              this.totalCount=response.data.resultData[1];
              this.totalAmount=response.data.resultData[2];
            }
          })
          }
        }else{//说明count不为1,肯定大于1
          axios({
            method:"post",
            url:"cart",
            params:{
              flag:"subtractCount",
              id:id
            }
          }).then(response=>{
            if(response.data.flag){
            //alert(response.data.resultData[0]);
            //需要将后台传过来的数据,展示在网页上(vue的方式)
            this.cartItems=response.data.resultData[0];
            this.totalCount=response.data.resultData[1];
            this.totalAmount=response.data.resultData[2];
          }
        })
        }

      },

(6)结果:将服务器刷新,添加几个图书到购物车中,点击“购物车”按钮,将一些图书的数量减掉,当图书的数量为1时,再点“-”时,会弹出提示“确认要删除吗?”当点击“确定”时,该购物项的记录会整体删除,此时表明代码ok 。

 

有关学习笔记——书城项目第五阶段之购物项加号、购物项减号的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  9. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  10. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

随机推荐