Java用mvc做玩偶购买_mvc架构实现商品的购买(二)

在上篇文章中 使用了mode1的模型来实现商品的浏览,这篇文章在上篇的基础上,使用mvc架构实现商品的购买。

运行结果:

27f2c0c3a362f373afa04d33da231884.gif

相对与上篇文章  我们多了购物车类

由于我们在购买物品时,购物车需要的属性为购买的商品和数量   所以我们用map的键值来保存购买的商品。

当然还有一个总价格,购物车的方法有 添加商品  删除商品  计算总价格其中总价格应该在每次添加商品和删除商品时 重新计算  购物车商品集合  只在初始化购物车的时候实例化一次即可

package entity;

import java.util.HashMap;

public class Cart {

//购物车商品集合

private HashMap cart;

//总金额

private double totalPrices;

public Cart() {

cart=new HashMap();

totalPrices=0.0;

}

public HashMap getCart() {

return cart;

}

public void setCart(HashMap cart) {

this.cart = cart;

}

public double getTotalPrices() {

return totalPrices;

}

public void setTotalPrices(double totalPrices) {

this.totalPrices = totalPrices;

}

//添加物品进购物车

public boolean addToCart(Items item,int counts){

//如果当前物品 已经添加过 只增加数量

if(cart.containsKey(item)){

cart.put(item, cart.get(item)+counts);

}else{

cart.put(item, counts);

}

//重新计算价格

calTotalPrice(item.getPrice()*counts);

return true;

}

//将物品从购物车删除

public boolean removeFromCart(Items item){

if(cart!=null&&cart.containsKey(item)){

calTotalPrice(-item.getPrice()*cart.get(item));

cart.remove(item);

}

return true;

}

//计算总金额

private void calTotalPrice(double price){

totalPrices+=price;

}

}

CartServlet的doGett方法根据action来进行相应的处理

if (request.getParameter("action") != null) {

action = request.getParameter("action");

if ("add".equals(action)) { // 添加商品

if (addGoodsToCart(request, response)) {

request.getRequestDispatcher("../success.jsp").forward(

request, response);

} else {

request.getRequestDispatcher("../failure.jsp").forward(

request, response);

}

} else if ("show".equals(action)) {// 显示购物车

request.getRequestDispatcher("../cart.jsp").forward(request,

response);

} else if ("delete".equals(action)) {// 删除物品

deleteGoodFromCart(request, response);

request.getRequestDispatcher("../cart.jsp").forward(request,

response);

}

}

当在商品界面 我们点击了放入购物车时 将当前商品的编号传到 购物车的servlet类CartServlet开始处理当前物品 并将当前物品放入购物车

再放入购物车之前 首先判断是否是第一次创建购物车  (购物车肯定只有一个  不能有多个)如果是第一次创建购物车cart

将当前购物车放入session ,然后通过ItemsDao对象调用getItemById(id)方法 获得商品对象  。然后将相应的商品对象 和商品数量放入购物车

//向购物车添加商品

private boolean addGoodsToCart(HttpServletRequest request,

HttpServletResponse response) {

String id=request.getParameter("id");

String counts=request.getParameter("num");

Items item=dao.getItemById(Integer.parseInt(id));

//判断是否是第一次创建购物车

if(request.getSession().getAttribute("cart")==null){

Cart cart=new Cart();

request.getSession().setAttribute("cart", cart);

request.getSession().setAttribute("dao", dao);

}

Cart cart=(Cart) request.getSession().getAttribute("cart");

//将商品添加到购物车

if(cart.addToCart(item, Integer.parseInt(counts))){

return true;

}else{

return false;

}

}

如果点击了查看购物车   CartServlet重定向到购物车页面

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

My JSP 'cart.jsp' starting page

function delcfm() {

if (!confirm("确认要删除?")) {

window.event.returnValue = false;

}

}

我的购物车

首页 >> 商品列表


商品名称商品单价商品价格购买数量操作

//首先判断session中是否有购物车对象

if(request.getSession().getAttribute("cart")!=null)

{

%>

Cart cart = (Cart)request.getSession().getAttribute("cart");

HashMap goods = cart.getCart();

Set items = goods.keySet();

Iterator it = items.iterator();

while(it.hasNext())

{

Items i = it.next();

%>

<%=i.getPicture()%>

删除

}

%>

总计:¥

}

%>

当点击了删除商品 CartServlet类调用删除商品的方法

// 从购物车删除商品

private boolean deleteGoodFromCart(HttpServletRequest request,

HttpServletResponse response) {

//从session中获取购物车对象

Cart cart = (Cart) request.getSession().getAttribute("cart");

if (cart != null) {

int id = Integer.parseInt(request.getParameter("id"));

if (cart.removeFromCart(dao.getItemById(id))) {

return true;

}

}

return false;

}

逻辑代码主要如上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值