//下面的方法是用一商品ActionForm 放入购物车中.
public void putIntoCart(CartGoodsForm cartGoodF,HttpServletRequest request){
System.out.println("2:"+cartGoodF.getGoodsid()+","+cartGoodF.getName()+","+cartGoodF.getProducer()+","+cartGoodF.getNumber());
HttpSession httpSession=request.getSession();
List stockGoodsList=(List)httpSession.getAttribute("stocklist");
//CartGoodsForm good=(CartGoodsForm)stockGoodsList.get(0);
//System.out.println("cart.do:"+good.getGoodsid()+","+good.getName()+","+good.getProducer()+","+good.getNumber());
if(stockGoodsList==null){
stockGoodsList=new ArrayList();
stockGoodsList.add(cartGoodF);
httpSession.setAttribute("stocklist",stockGoodsList);
CartGoodsForm cgf=(CartGoodsForm)stockGoodsList.get(0);
System.out.println("3:"+cgf.getGoodsid()+" , "+cgf.getName()+","+cgf.getNumber());
}else{
boolean isexist=false;
//System.out.println("else----1");
for(int i=0;i<stockGoodsList.size();i++){
//System.out.println("for here----"+i);
CartGoodsForm stkgood=(CartGoodsForm)stockGoodsList.get(i);
System.out.println("4:stkgood:"+stkgood.getGoodsid()+" , "+stkgood.getName()+","+stkgood.getNumber());
System.out.println("5:cartGoodF:"+cartGoodF.getGoodsid()+" , "+cartGoodF.getName()+","+cartGoodF.getNumber());
if(stkgood.getGoodsid().equals(cartGoodF.getGoodsid())){
stkgood.setNumber(stkgood.getNumber()+cartGoodF.getNumber());
stockGoodsList.set(i,stkgood);
httpSession.setAttribute("stocklist",stockGoodsList);
System.out.println("InstorageDAO:stockGoodsList.size():"+stockGoodsList.size()+">>已经存在GOODID");
isexist=true;
System.out.println("here----isexist:"+isexist);
break;
}
}
if(isexist==false){
stockGoodsList.add(cartGoodF);
httpSession.setAttribute("stocklist",stockGoodsList);
System.out.println("InstorageDAO:stockGoodsList.size():"+stockGoodsList.size()+">>不存在GOODID");
}
/* stockGoodsList.add(cartGoodF);
httpSession.setAttribute("stocklist",stockGoodsList);*/
}
}//可是不知道为什么,每当新放入一个商品时,原来session中已经购买的商品被新商品覆盖了,也就是说,购物车中永远只有一条商品记录.如果把上面的全部注释,而只用红色部分,结果是,商品记录是可以有多条,但是每条商品记录却是一样的,且为最后一次购买的商品记录.哪位大哥懂得是什么原因的吗?搞了一整天了.不知道问题在哪.....大伙帮帮忙.
public void putIntoCart(CartGoodsForm cartGoodF,HttpServletRequest request){
System.out.println("2:"+cartGoodF.getGoodsid()+","+cartGoodF.getName()+","+cartGoodF.getProducer()+","+cartGoodF.getNumber());
HttpSession httpSession=request.getSession();
List stockGoodsList=(List)httpSession.getAttribute("stocklist");
//CartGoodsForm good=(CartGoodsForm)stockGoodsList.get(0);
//System.out.println("cart.do:"+good.getGoodsid()+","+good.getName()+","+good.getProducer()+","+good.getNumber());
if(stockGoodsList==null){
stockGoodsList=new ArrayList();
stockGoodsList.add(cartGoodF);
httpSession.setAttribute("stocklist",stockGoodsList);
CartGoodsForm cgf=(CartGoodsForm)stockGoodsList.get(0);
System.out.println("3:"+cgf.getGoodsid()+" , "+cgf.getName()+","+cgf.getNumber());
}else{
boolean isexist=false;
//System.out.println("else----1");
for(int i=0;i<stockGoodsList.size();i++){
//System.out.println("for here----"+i);
CartGoodsForm stkgood=(CartGoodsForm)stockGoodsList.get(i);
System.out.println("4:stkgood:"+stkgood.getGoodsid()+" , "+stkgood.getName()+","+stkgood.getNumber());
System.out.println("5:cartGoodF:"+cartGoodF.getGoodsid()+" , "+cartGoodF.getName()+","+cartGoodF.getNumber());
if(stkgood.getGoodsid().equals(cartGoodF.getGoodsid())){
stkgood.setNumber(stkgood.getNumber()+cartGoodF.getNumber());
stockGoodsList.set(i,stkgood);
httpSession.setAttribute("stocklist",stockGoodsList);
System.out.println("InstorageDAO:stockGoodsList.size():"+stockGoodsList.size()+">>已经存在GOODID");
isexist=true;
System.out.println("here----isexist:"+isexist);
break;
}
}
if(isexist==false){
stockGoodsList.add(cartGoodF);
httpSession.setAttribute("stocklist",stockGoodsList);
System.out.println("InstorageDAO:stockGoodsList.size():"+stockGoodsList.size()+">>不存在GOODID");
}
/* stockGoodsList.add(cartGoodF);
httpSession.setAttribute("stocklist",stockGoodsList);*/
}
}//可是不知道为什么,每当新放入一个商品时,原来session中已经购买的商品被新商品覆盖了,也就是说,购物车中永远只有一条商品记录.如果把上面的全部注释,而只用红色部分,结果是,商品记录是可以有多条,但是每条商品记录却是一样的,且为最后一次购买的商品记录.哪位大哥懂得是什么原因的吗?搞了一整天了.不知道问题在哪.....大伙帮帮忙.
import java.util.List;public class A {
private String id; //声明一个属性
//set get 方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
} //测试
public static void main(String[] args) {
//new一个A的对象,并为属性赋值
A a=new A();
a.setId("aaaaa");
//new一个list,并将A对象放进去
List list=new ArrayList();
list.add(a);
//从list中取出A对象
a=(A) list.get(0);
System.out.println(a.getId());
//改变a对象属性,此处不用list.set()
a.setId("bbbbb");
System.out.println(a.getId());
//结果是aaaaa bbbbb
}
}这是一个小例子,你可以看一看,list等集合类存放对象的方式是存放对象的引用,也就是说在一般情况下当对象改变时不需要list.set()方法对list中对象进行替换,我的理解就是你的程序中,虽然新添加的商品cartGoodF是不同的商品,但使用的是同一个CartGoodsForm类,所以list中只会每次自动覆盖原cartGoodF(即使你不做stockGoodsList.set(i, stkgood);)解决方案你自己想办法吧。
我不敢保证我说的100%正确,但我敢保证我说的内容中100%有误差,呵呵!
Iterator i = list.iterator();list 是已填充好对象的list
Jobdicuser2 user= new Jobdicuser2();Jobdicuser2是一个数据对象
while(i.hasNext())
{
user = (Jobdicuser2)i.next();
xb =user.getXb();
xl =user.getPycc();
}
这个i好像并不是要覆盖第i个对象,而是把i向后移,把新对象放到第i个.
改变对象的值不需要这个方法