1. 程式人生 > >購物車功能實現

購物車功能實現

購物車功能的實現:

一、建立購物車類:

框架:

1. 購物車可以有很多不同種類的商品,可以將購物車傳入泛型;

2. 定義一個Map型別

Map<T,Integer> carMap;

public Car(){

//建立的hashMap應為有序的,鍵不重複值可重複的部分,所以使用LinkedHashMap

carMap=new LinkedHashMap<T,Integer>();

}

//獲取購物車

public Map<T,Integer> getCarMap(){

return

 carMap;

}

3. 購物車會實現增加商品,減少商品,和清空購物車的功能,因為可新增對應方法:public void saveOrUpdate(T p,Integer q){

//如果當前的購物車包含商品

if(carMap.containsKey(p)){

   //獲取當前商品的數量

int qq=carMap.get(p);

   //將商品和數量放置到購物車中

carMap.put(p, qq+q);

}else{

  //如果當前的購物車沒有商品,將當前的購物車數量放置到Map中

carMap.put(p, q);

}

}

二、car.jsp頁面操作:

1.引入<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

這樣能夠使用jstl語句;

2.購物車中有繼續購物,清除購物車和新增訂單的功能;所以在jsp頁面上設定對應的連結,實現相關操作:

<div align="right">

<a href="${pageContext.request.contextPath}/ProdListServlet">

繼續購物</a>

<a href="${pageContext.request.contextPath}/CleanServlet">清空購物車</a>

<a href="${pageContext.request.contextPath}/addOrder.jsp">新增訂單</a>

</div>

3.購物車中也有金額實現,定義變數money,初始化值為0;

<c:set var="money" value="0"></c:set>

4. 購物車中:縮圖、商品名稱種類、單價、數量、總價、操作內容

使用<c:forEach>方式進行遍歷,裡面分別有傳入縮圖的路徑;商品的名稱,種類、單價、數量、總價、操作;詳見程式碼:

<table>

<c:forEach items="${car.carMap}" var="entry">

<tr>

<td><img src="${pageContext.request.contextPath}/ImgServlet?id=${entry.key.id}&type=s"></td>

<td>${entry.key.name }</td>

<td>${entry.key.category }</td>

<td>${entry.key.price }元</td>

<td><input  type="text" value="${entry.value}"  onchange="changeNum('${entry.key.id}',this)"></td>

<td>${entry.key.price*entry.value }元</td>

<c:set var="money" value="${money+ entry.key.price*entry.value }"></c:set>

<td><a href="${pageContext.request.contextPath}/DelCarServlet?id=${entry.key.id}">刪除</a></td>

</tr>

</c:forEach>

</table>

 

jsp頁面的右下角,設定總金額:

<div align="right">

<font color="red" size="6">總價:${money}元</font>

</div>

 

三、servlet相關操作:

⑴ProdListServlet功能實現:繼續購物,就是轉回到購物列表中;

1.宣告ProdService類物件,便於查詢所有商品

ProdService service=(ProdService) BasicFactory.getFactory().getInstance("ProdService");  

2.在doPost或doGet方法中呼叫findAllProds()方法:

//獲取所有商品,並將其返回到列表中

List<Prod> list=service.findAllProds();

request.setAttribute("list", list);

request.getRequestDispatcher("/prodList.jsp").forward(request, response);

3.因為涉及到findAllProds()方法,所以在ProductDaoImpl實現findAllProds()操作;

1)定義sql語句:

 String sql = "select * from products";

2)QueryRunner runner=new QueryRunner(DaoUtils.getSource());

3)Runner.update(sql,new BeanListHandler<Prod>(Prod.class));

 

⑵CleanServlet功能實現,清空購物車:

首先需要獲取car物件,然後呼叫clean方法

Car<Prod> car=(Car<Prod>) request.getSession().getAttribute("car");

Car.clean();

當購物車清空完畢後,跳轉到car.jsp頁面

response.sendRedirect(request.getContextPath()+"/car.jsp");

 

四、設定刪除購物車商品的功能:

建立連結:

<td><a href="${pageContext.request.contextPath}/DelCarServlet?id=${entry.key.id}">刪除</a></td>

 

在DelCarServlet實現刪除操作:

1)首先獲取ProdService物件

ProdService service = (ProdService) BasicFactory.getFactory().getInstance("ProdService");

2)獲取商品的id

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

3)根據商品的id獲取商品物件

  Prod prod = service.findProdById(Integer.valueOf(id));

4)獲取session中的car物件

Car<Prod> car=(Car<Prod>)request.getSession().getAttribute(“car”);

5)讓購物車實現刪除商品的操作:

 car.delete(prod);

6)當刪除完商品後,重定向到car.jsp頁面中

response.sendRedirect(request.getContextPath()+"/car.jsp");

 

五、頁面金額隨著點選數目,而做出總額改變的功能:

car.jsp頁面中,設定初始化變數money,它的值為0

<c:set var=”money” value=”0”><c:set>

//遍歷的內容是carmap類,這樣可以使用jstl直接呼叫屬性值;如下程式碼顯示,${entry.key.id}可以獲取carMapid值;

<c:forEach items="${car.carMap}" var="entry">

<td><input  type="text" value="${entry.value}"  onchange="changeNum('${entry.key.id}',this)"></td>

</c:forEach>

 

遍歷後,為了方便展示總價,使用此樣式

<div align="right">

<font color="red" size="6">總價:${money}元</font>

</div>

 

六、縮圖功能的實現:

Jsp頁面顯示:

<c:forEach items="${car.carMap}" var="entry">

<tr>

<td><img src="${pageContext.request.contextPath}/ImgServlet?id=${entry.key.id}&type=s"></td>

</tr>

 

Servlet進行操作:

先獲取idtype.

String id=request.getParameter(“id”);

String type=request.getParameter(“type”);

//獲取商品物件

Prod prod=service.findProdById(Integer.valueOf(id));

String s=null;

判斷當前type是否為s,因為在PicUtils中使用s來判斷縮圖,如果是縮圖,就將縮圖的地址傳到s;

If(“s”.equals(type)){

//獲取縮圖的地址

s = prod.getImgurls();

}else{

//獲取普通圖的地址

s = prod.getImgurl();

}

//進行轉發

request.getServletContext().getRequestDispatcher(s).forward(request, response);

 

 

Service進行操作:

@Override

public Prod findProdById(Integer id) {

// TODO Auto-generated method stub

return dao.findProdById(id);

}

 

Dao進行操作:

定義sql語句:

String sql = "select * from products where id=?";

//獲取連線物件

QueryRunner runner = new QueryRunner(DaoUtils.getSource());

//使用更新

Prod prod=runner.query(sql, newBeanHandler<Prod>(Prod.class),id);

return prod;