以上的代码为了简化,我省去了一写东西,包括addItem方法的参数,下面是全部的代码:
CartBean:
package com.jluptown.ses.product;import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;
import java.io.*;
import java.util.*;
import javax.naming.*;
import com.jluptown.cmp.product.ejb.*;
import com.chnnn.utils.*;
import com.product.manage.*;
import javax.rmi.PortableRemoteObject;public class CartBean
    implements SessionBean {
  SessionContext sessionContext;
  private ProductRemote product;
  private Context ctx;  private Collection items;
  private Map itemMap=new HashMap();  public void ejbCreate() throws CreateException {
  }  public void ejbRemove() {
  }  public void ejbActivate() {
  }  public void ejbPassivate() {
  }  public void setSessionContext(SessionContext sessionContext) {
    this.sessionContext = sessionContext;
  }
  public ProductRemote getProduct(String pid){
    ProductRemote product=null;
    try{
      ctx=GetContext.getInitialContext();
      Object ref=ctx.lookup("ProductRemote");
      ProductRemoteHome home=(ProductRemoteHome)PortableRemoteObject.narrow(ref,ProductRemoteHome.class);
      product=home.findByPrimaryKey(pid);
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      return product;
    }
  }
  //添加商品
  public void addItem(String pid,Integer pnum){
    try{
      int num=pnum.intValue();
      ProductRemote item=getProduct(pid);
      CartItem cartItem=null;
      if(itemMap.containsKey(pid)){//若已有此商品,则把数量更新一下
        cartItem=(CartItem)itemMap.get(item.getProductID());
        cartItem.setQuantity(num+cartItem.getQuantity());
      }else{//购物车里无此商品
        cartItem=new CartItem();
        cartItem.setItem(item,num);
      }
      if(itemMap==null)System.out.println("map");
      if(item==null)System.out.println("item");
      if(cartItem==null)System.out.println("cartItem");
      itemMap.put(item.getProductID(),cartItem);
      items=itemMap.values();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  //删除某件商品
  public ProductRemote removeItem(String pid){
    if(itemMap.containsKey(pid)){
      CartItem cartItem = (CartItem) itemMap.remove(pid);
      items=itemMap.values();
      return cartItem.getItem();
    }
    return null;
  }  //减少某件商品数量
  public void decreaseItem(String pid,Integer pnum){
    int num=pnum.intValue();
    if(itemMap.containsKey(pid)){//有此商品才进行减少操作
      CartItem cartItem = (CartItem) itemMap.get(pid);
      if(cartItem.getQuantity()>num){
        cartItem.setQuantity(cartItem.getQuantity()-num);
      }else{
        removeItem(pid);//减多了,就全部删除
      }
    }
  }  //清空购物车
  public void clear(){
    itemMap.clear();
  }  //计算购物车总金额
  public double getCartTotal(){
    double total=0;
    Iterator it=itemMap.values().iterator();
    int i=0;
      while (it.hasNext()) {
        CartItem cartItem = (CartItem) it.next();
        cartItem.calculate();
        total = total + cartItem.getTotal();
      }
    return total;
  }
  public Collection getCartItems(){
    items=itemMap.values();
    return items;
  }
  public Map getCartItems(String s){
    return this.itemMap;
  }  public Collection getItems() {
    return items;
  }  public Map getItemMap() {
    return itemMap;
  }
}

解决方案 »

  1.   

    CartItem:package com.product.manage;import java.io.*;
    import java.util.*;
    import javax.naming.*;
    import com.jluptown.cmp.product.ejb.*;
    import com.chnnn.utils.*;public class CartItem implements Serializable{  private ProductRemote item;
      private Context ctx;
      private int quantity;
      private double total;  public CartItem() {
        initial();
      }
      public void initial(){
        try{
          ctx=GetContext.getInitialContext();
        }catch(Exception e){
          e.printStackTrace();
        }  }  public double getTotal(){
        return this.total;
      }  public void setItem(ProductRemote item,int qty){
        this.item=item;
        setQuantity(qty);
      }
      public ProductRemote getItem(){
        return this.item;
      }  public void setQuantity(int qty){
        this.quantity=qty;
      }
      public int getQuantity(){
        return this.quantity;
      }  public void calculate(){//计算这个项的总价
        try{
          if(item!=null&&item.getPrice()!=null)
          total=item.getPrice().intValue()*quantity;
        }catch(Exception e){    }
      }
    }
      

  2.   

    上面代码中有个ProductRemote是个实体ProductBean的接口,表示一个商品的信息
      

  3.   

    学习啊.我还没写过Bean.---初学者
      

  4.   

    Cart cart=(Cart)session.getAttribute("cart");
    Collection items=cart.getCartItems();Cart是什么东东? getCartItems()不是CartBean的方法吗?
      

  5.   

    Cart是CartBean的Remote接口,不好直接操纵CartBean的,只能通过Remote或Local接口调用其方法