购物车功能(一)

一、门户书籍搜索后台功能实现

在这里插入图片描述
实现界面上的搜索功能,可以根据书名查询,也可以根据类别查询,名字查询已经做过,所以只需要在查询的方法上加一个条件。

public List<Book> list(Book book,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
		String name = book.getName();
		String sql = "select * from t_easyui_book where true ";
		long cid=book.getCid();
		if(StringUtils.isNotBlank(name)) {
			sql += " and name like '%"+name+"%'";
		}
		if(StringUtils.isNotBlank(name)) {
			sql += " and cid ="+cid;
		}
		return super.executeQuery(sql, Book.class, pageBean);
	}

然而在业务逻辑层里的datagrid方法不能用了,因为我们用forEach遍历做信息展示就直接加载数据、跳转页面,就不能用线程的方式了。所以我们要重新写一个方法

public String search(HttpServletRequest req,HttpServletResponse resp) {
		PageBean pageBean = new PageBean();
		pageBean.setRequest(req);
		try {
			List<Book> list = this.bookDao.list(book, pageBean);
//			因为search做遍历
			req.setAttribute("books", list);
		} catch (InstantiationException | IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "search";
		
	}

再配置一下

<action path="/book" type="com.meng.web.BookAction">
	<forward name="search" path="/search.jsp" redirect="false" />
	</action>

新建一个js,这个是分类列表

<script src="${pageContext.request.contextPath}/static/js/common.js"></script>

添加事件,

function search(){
				location.href="${pageContext.request.contextPath }/book.action?methodName=search&name="+$("#book_name").val();
			}

index.js

function searchByType(cid){
	var ctx = $("#ctx").val();	
	location.href=ctx+"/book.action?methodName=search&cid="+cid;
}

在这里插入图片描述

二、加入购物车前端页面

需要准备购物车的字段(实体类ShopGoodsVo),放在vo包里

package com.meng.vo;


import java.util.Objects;


public class ShopGoodsVo {
//    购物车列表订单项所需数据
    private String name;
    private float price;
    private int num;
    private float total;

//    提交订单所需数据
    private String consignee;
    private String phone;
    private String postalcode;
    private String address;
    private int sendType;

//    页面的所有传参字符串
    private String pageStr;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ShopGoodsVo that = (ShopGoodsVo) o;
        return Float.compare(that.price, price) == 0 &&
                num == that.num &&
                Float.compare(that.total, total) == 0 &&
                Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, price, num, total);
    }

	public String getName() {
		return name;
	}

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

	public float getPrice() {
		return price;
	}

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

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public float getTotal() {
		return total;
	}

	public void setTotal(float total) {
		this.total = total;
	}

	public String getConsignee() {
		return consignee;
	}

	public void setConsignee(String consignee) {
		this.consignee = consignee;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getPostalcode() {
		return postalcode;
	}

	public void setPostalcode(String postalcode) {
		this.postalcode = postalcode;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public int getSendType() {
		return sendType;
	}

	public void setSendType(int sendType) {
		this.sendType = sendType;
	}

	public String getPageStr() {
		return pageStr;
	}

	public void setPageStr(String pageStr) {
		this.pageStr = pageStr;
	}

	@Override
	public String toString() {
		return "ShopGoodsVo [name=" + name + ", price=" + price + ", num=" + num + ", total=" + total + ", consignee="
				+ consignee + ", phone=" + phone + ", postalcode=" + postalcode + ", address=" + address + ", sendType="
				+ sendType + ", pageStr=" + pageStr + "]";
	}

	public ShopGoodsVo(String name, float price, int num, float total, String consignee, String phone,
			String postalcode, String address, int sendType, String pageStr) {
		super();
		this.name = name;
		this.price = price;
		this.num = num;
		this.total = total;
		this.consignee = consignee;
		this.phone = phone;
		this.postalcode = postalcode;
		this.address = address;
		this.sendType = sendType;
		this.pageStr = pageStr;
	}

	public ShopGoodsVo() {
		super();
	} 
}

加入购物车添加个点击事件跳转购物车页面

href="${pageContext.request.contextPath}/shopping.action?methodName=add&name=${b.name}&price=${b.price}&num=1&total=${b.price}">加入购物车

三、购物车功能实现

编码业务逻辑层ShoppingAction

package com.meng.web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.meng.dao.OrderDao;
import com.meng.dao.OrderItemDao;
import com.meng.entity.Order;
import com.meng.entity.OrderItem;
import com.meng.entity.User;
import com.meng.util.EasyuiResult;
import com.meng.util.ResponseUtil;
import com.meng.util.StringUtils;
import com.meng.vo.ShopGoodsVo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriven;

public class ShoppingAction extends ActionSupport implements ModelDriven<ShopGoodsVo>{
	
	private ShopGoodsVo shopGoodsVo = new ShopGoodsVo();
    private OrderDao orderDao = new OrderDao();
    private OrderItemDao orderItemDao = new OrderItemDao();

//    购物车结算
    public String createOrder(HttpServletRequest request, HttpServletResponse response) {
        try {
            User currentUser = (User) request.getSession().getAttribute("currentUser");
            long uid = currentUser.getId();
            /*
            ShopGoodsVo(name=null, price=0.0, num=0, total=0.0, consignee=8, phone=8, postalcode=8, address=8, sendType=1,
            pageStr=,斗破苍穹-0.0-1-66.0,时光走了你还在-0.0-1-33.0,测试-0.0-1-3.0)
             */
            String pageStr = shopGoodsVo.getPageStr();
            float total = 0;
            List<OrderItem> orderItems = new ArrayList<>();
            OrderItem orderItem = null;

//            订单项就暂时不做了
            for (String s : pageStr.substring(1).split(",")) {
                orderItem = new OrderItem();
                String[] items = s.split("-");
                orderItem.setBid(items[0]);
                orderItem.setQuantity(Integer.valueOf(items[2]));
                total += Float.valueOf(items[items.length-1]);
                orderItems.add(orderItem);
            }
//            System.out.println(shopGoodsVo);
            Order order = new Order();
            order.setAddress(shopGoodsVo.getAddress());
            order.setConsignee(shopGoodsVo.getConsignee());
            order.setOrderPrice(total);
            order.setOrderState(1);
            order.setPhone(shopGoodsVo.getPhone());
            order.setPostalcode(shopGoodsVo.getPostalcode());
            order.setSendType(shopGoodsVo.getSendType());
            order.setUid(uid);
            int res = this.orderDao.add(order);


//            按订单生成时间倒序获取新生成订单的id
            Order newest = this.orderDao.newest();

//            然后for入订单项库
            for (OrderItem item : orderItems) {
                item.setOid(newest.getId());
                this.orderItemDao.add(item);
            }


            ResponseUtil.writeJson(response, res);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

//    删除购物车
    public String del(HttpServletRequest request, HttpServletResponse response) {
        ObjectMapper om = new ObjectMapper();
        try {
            User currentUser = (User) request.getSession().getAttribute("currentUser");
            long uid = currentUser.getId();
            String shopId = "shopId_" + uid;
            String shopVoStr = (String) request.getServletContext().getAttribute(shopId);
            List<ShopGoodsVo> shopGoodsVos = om.readValue(shopVoStr, List.class);
            int index = Integer.valueOf(shopGoodsVo.getPageStr());
            shopGoodsVos.remove(index);
            request.getServletContext().setAttribute(shopId,om.writeValueAsString(shopGoodsVos));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list(request,response);
    }

//    清空购物车
    public String clear(HttpServletRequest request, HttpServletResponse response) {
        User currentUser = (User) request.getSession().getAttribute("currentUser");
        long uid = currentUser.getId();
        String shopId = "shopId_" + uid;
        request.getServletContext().removeAttribute(shopId);
        try {
            ResponseUtil.writeJson(response, EasyuiResult.SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

//    购物列表查询
    public String list(HttpServletRequest request, HttpServletResponse response) {
        ObjectMapper om = new ObjectMapper();

        try {
            User currentUser = (User) request.getSession().getAttribute("currentUser");
            long uid = currentUser.getId();
            String shopId = "shopId_" + uid;
            String shopVoStr = (String) request.getServletContext().getAttribute(shopId);
            List<ShopGoodsVo> shopGoodsVos = null;
            if (StringUtils.isNotBlank(shopVoStr)){
                shopGoodsVos = om.readValue(shopVoStr, List.class);
            }else
            {
                shopGoodsVos = new ArrayList<>();
            }

            request.setAttribute("shopGoodsVos",shopGoodsVos);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "shoppingCar";
    }

    //    加入购物车
    public String add(HttpServletRequest request, HttpServletResponse response) {
        ObjectMapper om = new ObjectMapper();
        User currentUser = (User) request.getSession().getAttribute("currentUser");
        long uid = currentUser.getId();
        String shopId = "shopId_" + uid;
        String shopVo = (String) request.getServletContext().getAttribute(shopId);
        List<ShopGoodsVo> shopGoodsVos = null;
        try {
            if (StringUtils.isNotBlank(shopVo)) {
//           购物车没有数据处理逻辑
                shopGoodsVos = (List<ShopGoodsVo>) om.readValue(shopVo, List.class);
                shopGoodsVos.add(shopGoodsVo);
                
            } else {
//            购物车有数据处理逻辑
                shopGoodsVos = new ArrayList<>();
                shopGoodsVos.add(shopGoodsVo);
            }
            request.getServletContext().setAttribute(shopId,om.writeValueAsString(shopGoodsVos));
            request.setAttribute("shopGoodsVos",shopGoodsVos);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "shoppingCar";
    }

    //    支付
    public String pay(HttpServletRequest request, HttpServletResponse response) {
        return null;
    }

    @Override
    public ShopGoodsVo getModel() {
        return shopGoodsVo;
    }

}

写完业务逻辑层就配置xml,这个就不用说了

 <!--购物车功能-->
    <action path="/shopping" type="com.meng.web.ShoppingAction">
        <forward name="shoppingCar" path="/fg/shoppingCar.jsp" redirect="false"/>
    </action>

搜索书籍界面

从主界面搜索跳转到搜索界面,然后点击加入购物车跳转到购物车界面

扫描二维码关注公众号,回复: 11618612 查看本文章
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="z" uri="/meng" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>网上书城首页</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css" rel="stylesheet">
	<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/static/css/fg.css" />
</head>
<body>
		<div class="container">
			<!-- 横幅 -->
			<div class="row">
				<div class="col-sm-4">
					您好,欢迎来到飞凡网上书城 !
				</div>
				<div class="col-sm-4 col-sm-offset-4">
					<a href="#">登录</a> | <a href="#">注册</a> | <b>我的购物车</b> | <i>网站首页</i>
				</div>
			</div>

			<!-- 搜索栏 -->
			<div class="row">
				<div class="col-sm-12 search-parent">
					<!-- 本来这里应该放一张背景图的 -->
					<div class="search"></div>
					<input type="text" id="book_name" name="name" value="" />
					<button type="button" class="btn btn-primary">搜索</button>
				</div>
			</div>

			<!-- 主内容区 -->
			<div class="row content">
				<div class="col-sm-3 l-content">
					<ul class="list-group c-category">
						<li class="list-group-item text-white">书籍分类</li>

					</ul>
				</div>
				<div class="col-sm-9">
					<c:forEach items="${books }" var="b">
						<div class="media">
							<img src="${b.image }" class="align-self-center mr-3" alt="...">
							<div class="media-body">
								<p>${b.name }</p>
								<p>作者:${b.author }</p>
								<p>价格:¥${b.price }</p>
								<p>出版社:${b.publishing }</p>
								<p>简介:${b.description }</p>
								<p>
									<!-- <button class="btn btn-danger" style="width: 150px;" onclick="addShopCar(this);">加入购物车</button> -->
									<a type="button" class="btn btn-danger" href="${pageContext.request.contextPath}/shopping.action?methodName=add&name=${b.name}&price=${b.price}&num=1&total=${b.price}">加入购物车</a>
									<button class="btn btn-danger" style="width: 150px;">去结算</button>
								</p>
							</div> 						
						</div>
					</c:forEach>
					<z:page pageBean="${pageBean }"></z:page>
				</div>
			</div>

			<!-- 底部版权 -->
			<div class="row">
				<div class="col-sm-12 text-center">
					Copyright ©2020 卓京教育,版权所有
				</div>
			</div>
		</div>
	<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.js"></script>
	<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
	<script src="${pageContext.request.contextPath }/static/js/common.js"></script>
	<script type="text/javascript">
	   /*  function addShopCar(){
	       var $div = $(node).parent().parent();
	      var name = $div.find("p").eq(0).html();
	      var price = $div.find("p").eq(1).html();
	      var name = $div.find("p").eq(0).html();
	    }; */
	</script>

</body>
</html>

购物车界面代码

   <meta charset="utf-8">
    <title>购物车</title>
  <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css" rel="stylesheet">
	<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/static/css/fg.css" />   
</head>
<body>

		<div class="container">
			<!-- 横幅 -->
			<div class="row">
				<div class="col-sm-4">
					您好,欢迎来到网上书城!
				</div>
				<div class="col-sm-4 col-sm-offset-4">
					<a href="#">登录</a> | <a href="#">注册</a> | <b>我的购物车</b> | <i>网站首页</i>
				</div>
			</div>
			<!-- 搜索栏 -->
			<div class="row">
				<div class="col-sm-12 search-parent">
					<!-- 本来这里应该放一张背景图的 -->
					<div class="search"></div>
					<input type="text" id="book_name" name="name" value="" />
					<button type="button" class="btn btn-primary">搜索</button>
				</div>
			</div>
			<!-- 主内容区 -->
			<div class="row content">
				<div class="col-sm-3 l-content">
					<ul class="list-group c-category ">
						<li class="list-group-item" style="color: white;">书籍分类</li>
					</ul>
				</div>
				<div class="col-sm-9">
					<table class="table">
						<thead class="thead-dark">
							<tr style="background-color: papayawhip;">
								<th scope="col">书名</th>
								<th scope="col">单价</th>
								<th scope="col">数量</th>
								<th scope="col">小计</th>
								<th scope="col">操作</th>
							</tr>
						</thead>
						<tbody>
						<c:forEach items="${shopGoodsVos }" var="s">
							<tr>
								<td>${s.name }</td>
								<td>${s.price }</td>
								<td>
									<input type="text" value="${s.num }">
								</td>
								<td>${s.total }</td>
								<td>
									<a href="#">删除</a>&nbsp;&nbsp;
									<a href="#">更新</a>
								</td>
							</tr>
						</c:forEach>	
							<tr>
								<td colspan="5">
									<div class="btn btn-danger" style="width: 200px;">清空购物车</div>
									<div class="btn btn-danger shop-table-tab" style="width: 200px;">继续购物</div>
									<div class="btn btn-danger" style="width: 200px;">去结算</div>
								</td>  
							</tr>
						</tbody>
					</table>
				</div>
			</div>
			<!-- 底部版权 -->
			<div class="row">
				<div class="col-sm-12 text-center">
					Copyright 2020 教育,版权所有
				</div>
			</div>
		</div>
		
	<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.js"></script>
	<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
    <script src="${pageContext.request.contextPath}/static/js/common.js"></script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_47906421/article/details/107280034