名词解释:
购物车,顾名思义,就是具有与超市中购物车相同功能的模块.
本例主要以实现购物车基本功能(向购物车中添加商品,修改商品,删除商品).我将采用Struts1.2来写这个例子,好了,现在我们开始.成品如下图:
图-1
图-2
一.我们首先要建立数据库,内容很简单,只需有三个字段,即:商品编号,商品名称,商品价格.然后为其添加一些商品即可.
二.在首页面上我们用多选框来选定要买的商品,然后将每个选定的商品的编号作为一个数组传入Action中进行处理.
三.下面为大家来讲解一下Action中对于购物车功能实现的核心代码:
//这一步很简单,就是获取session.用于我们后来存储购物车的内容.
HttpSession session = request.getSession();
//这一步就是从session中获取购物车.
Vector car = (Vector) session.getAttribute("car");
//这是我首页面的Form表单
IndexForm inf = (IndexForm) form;
//product_do是我对于商品处理的一个类,其中包括安商品编号查找商品所有信息.
product_do pdo = new product_do();
//这就是我们得到的从首页面传过来的选定的商品编号的数组
String[] choice = inf.getChoice();
//下面判断这个数组是否为空.
if (choice.length == 0) {
//如果为空,说明没有选定任何商品,则跳回首页面
return mapping.getInputForward();
} else {
//如果不为空,遍历这个数组.
for (int i = 0; i < choice.length; i++) {
//声明一个布尔型变量,用于以后对于购买重复商品则数量叠加的控制.
boolean f = false;
//安数组中的现在下标位置的值(也就是商品编号),来获得这个商品的所有信息,并存入一个商品的javabean.
productBean pb = pdo.showproductByid(Integer
.parseInt(choice[i]));
//创建一个新的购物车bean,并向其存入上面得到的商品bean里面的商品信息.
carBean cb = new carBean();
cb.setProduct_id(pb.getProduct_id());
cb.setProduct_name(pb.getProduct_name());
cb.setProduct_price(pb.getProduct_price());
cb.setProduct_num(1);
cb.setProduct_totalmoney();
//这个判断是检查上面得到的购物车car是否为空
if (car==null) {
//如果为空的话,创建一个新的集合Vector,并将上面创建的购物车carBean存放进来.
car = new Vector();
car.addElement(cb);
} else {
//如果不为空的话,遍历session中得到的购物车car.
for (int j = 0; j < car.size(); j++) {
//如果当前商品在购物车中已经存在的话,就给它的数量加一,并且重新计算它的总价格,然后重新放回到car的原位置
carBean cb2 = (carBean) car.elementAt(j);
if (cb2.getProduct_id() == cb.getProduct_id()) {
cb2.setProduct_num(cb2.getProduct_num() + 1);
cb2.setProduct_totalmoney();
car.setElementAt(cb2, j);
f = true;
}
}
//购物车中没有当前商品时,将其添加到购物车中
if (f == false) {
car.addElement(cb);
}
}
}
}
//将购物车car放入session中,然后跳转到查看购物车页面.
session.setAttribute("car", car);
return mapping.findForward("tocar");
四.下面我将给出商品bean和购物车bean的源代码
商品bean: productBean
public class productBean {
int product_id;
String product_name;
float product_price;
public int getProduct_id() {
return product_id;
}
public void setProduct_id(int product_id) {
this.product_id = product_id;
}
public String getProduct_name() {
return product_name;
}
public void setProduct_name(String product_name) {
this.product_name = product_name;
}
public float getProduct_price() {
return product_price;
}
public void setProduct_price(float product_price) {
this.product_price = product_price;
}
}
购物车bean: carBean
public class carBean {
int product_id;
String product_name;
float product_price;
int product_num;
float product_totalmoney;
public int getProduct_id() {
return product_id;
}
public void setProduct_id(int product_id) {
this.product_id = product_id;
}
public String getProduct_name() {
return product_name;
}
public void setProduct_name(String product_name) {
this.product_name = product_name;
}
public int getProduct_num() {
return product_num;
}
public void setProduct_num(int product_num) {
this.product_num = product_num;
}
public float getProduct_price() {
return product_price;
}
public void setProduct_price(float product_price) {
this.product_price = product_price;
}
public float getProduct_totalmoney() {
return product_totalmoney;
}
public void setProduct_totalmoney() {
this.product_totalmoney = product_price * product_num;
}
}
五.下面给出商品处理的逻辑类的源代码:
product_do:
public class product_do {
public productBean showproductByid(int id) {
productBean pb = null;
Connection conn = DBConnect.getDB();
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from product where product_id="
+ id);
while (rs.next()) {
pb = new productBean();
pb.setProduct_id(rs.getInt(1));
pb.setProduct_name(rs.getString(2));
pb.setProduct_price(rs.getFloat(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return pb;
}
}
六.好了,主要逻辑已经讲完了,我只是给出了一些核心代码,至于页面上如何显示,各页面与Action之间如何连接就看各位看官自己的爱好了,至于还想要什么功能应该也不是什么难事,如果有问题的话请给我留言,谢谢各位!