[TP11] Ajout d'un item dans caddy mais panier vide [RESOLU]

Modérateurs : graffion, jmdouin, agoncal, mlebihan

davidcha
Messages : 12
Inscription : 05 oct. 2015 19:53

[TP11] Ajout d'un item dans caddy mais panier vide [RESOLU]

Message par davidcha » 12 janv. 2016 0:44

Bonjour,
lorsque j'ajoute un item via AddItemToCartServlet, la map est vide lors de l'affichage du panier.
En debug, j'observe que la map est bien alimenté lors du premier appel à ShoppingCartBean.
Lors du second appel le le getItem retour NULL car la map est vide.
Je pense que j'ai mal codé ShoppingCartDelegate car je n'ai fais rien du id de la session passé en argument du constructeur.
Voir ci-dessous ShoppingCartDelegate:

Code : Tout sélectionner

public class ShoppingCartDelegate implements ShoppingCart{
    String _sessionId;
   

    // ======================================
    public ShoppingCartDelegate(String sessionId) {
        _sessionId=sessionId;
    }
     public String getSessionId() {
        return _sessionId;
    }

    // ======================================
    // =            Constructors            =
    public void setSessionId(String _sessionId) {
        this._sessionId = _sessionId;
    }

    @Override
    public Map getCart() {
    
            return getShoppingCart().getCart();
            
    }

    @Override
    public Collection getItems() {
        return getShoppingCart().getItems();
    }

    @Override
    public void addItem(String itemId) {
         getShoppingCart().addItem(itemId);
    }

    @Override
    public void removeItem(String itemId) {
       getShoppingCart().removeItem(itemId);
    }

    @Override
    public void updateItemQuantity(String itemId, int newQty) {
        getShoppingCart().updateItemQuantity(itemId, newQty);
    }

    @Override
    public Double getTotal() {
        return getShoppingCart().getTotal();
    }

    @Override
    public void empty() {
         getShoppingCart().empty();
    }
    
      // ======================================
    // =            Private methods         =
    // ======================================
    private  ShoppingCart getShoppingCart() {
        ShoppingCart shoppingCart = null;
       
            // Looks up for the home interface
           
      shoppingCart = (ShoppingCart) ServiceLocator.getInstance().getHome(ShoppingCartHome.JNDI_NAME);
        return shoppingCart;
    }
}
Voir ci-dessous ShoppingCartBean:

Code : Tout sélectionner

@Stateful (name="ShoppingCartSB")
public class ShoppingCartBean extends AbstractRemoteService implements ShoppingCart {
  
    // ======================================
    // =             Attributes             =
    // ======================================
    ItemDAO itemDAO=new ItemDAO();
    // ======================================
    // =            Constructors            =
    // ======================================
    public ShoppingCartBean() {
    }
    private Map<String, Double> cart = new HashMap<String, Double>();
    @Override
    public Map getCart() {
         final String mname = "getCart";
        Trace.entering(getCname(), mname);
        return cart;
    }

    @Override
    public Collection getItems() {
         final String mname = "getItems";
        Trace.entering(getCname(), mname);
        Collection listeItem=null;
        if(cart != null && cart.isEmpty())
       {
           Iterator iterator = cart.entrySet().iterator();
            while (iterator.hasNext()) {
		Map.Entry entry = (Map.Entry) iterator.next();
		String itemId = (String) entry.getKey();
              
		Double nbItem = (Double) entry.getValue();
                CatalogServiceBean catalogServiceBean =new CatalogServiceBean();
                ItemDTO itemDTO;
               try {
                   itemDTO = catalogServiceBean.findItem(itemId);
                   ShoppingCartItemDTO shoppingCartItemDTO=new ShoppingCartItemDTO(itemId, itemDTO.getName(), itemDTO.getProductDescription(), 1, itemDTO.getUnitCost());
                   if(listeItem == null)
                   {
                        listeItem=new ArrayList();
                   }
                    listeItem.add(shoppingCartItemDTO);
               } catch (FinderException ex) {
                  
               } catch (CheckException ex) {
                 
               }
            
            }

	}
        return listeItem;
    }

    
    @Override
    public void addItem(String itemId){
        final String mname = "addItem";
        Trace.entering(getCname(), mname, itemId);
        Double nbItem=cart.get(itemId);
        if(nbItem == null)
        {
               // shoppingCartItemDTO=new ShoppingCartItemDTO(itemId, item.getName(), item.getProduct().getDescription(), 1, item.getUnitCost());
                cart.put(itemId,new Double(1));   
        }
        else
        {
            double nb=nbItem.doubleValue();        
            cart.remove(itemId);
            
            cart.put(itemId, nb+1);
        }
    }

    @Override
    public void removeItem(String itemId) {
          final String mname = "removeItem";
        Trace.entering(getCname(), mname, itemId);
        if(cart.get(itemId) != null)
        {
            cart.remove(itemId);
        }
    }

    @Override
    public void updateItemQuantity(String itemId, int newQty) {
         final String mname = "updateItemQuantity";
        Trace.entering(getCname(), mname, itemId);
        if(cart.get(itemId) != null)
        {
            cart.remove(itemId);
            Double newQtyDouble=new Double(newQty);
            //ShoppingCartItemDTO shoppingCartItemDTO=new ShoppingCartItemDTO(itemId, null, null, newQty, 0);
            cart.put(itemId, newQtyDouble);
        }
       
    }

    @Override
    public Double getTotal() {
       final String mname = "getTotal";
       Trace.entering(getCname(), mname);
       Double total=null;
       double coutTotal=0;
       if(cart != null && cart.isEmpty())
       {
           Iterator iterator = cart.entrySet().iterator();
            while (iterator.hasNext()) {
		Map.Entry entry = (Map.Entry) iterator.next();
		String itemId = (String) entry.getKey();
              
		Double nbItem = (Double) entry.getValue();
               try {
                   final Item item = (Item)itemDAO.findByPrimaryKey(itemId);
                   coutTotal=coutTotal+(item.getUnitCost()*nbItem);
               } catch (ObjectNotFoundException ex) {
                   Logger.getLogger(ShoppingCartBean.class.getName()).log(Level.SEVERE, null, ex);
               }
            }

	}
        total=new Double(coutTotal);
       return total;
    }
       
    @Override
    public void empty() {
           final String mname = "empty";
        Trace.entering(getCname(), mname);
       cart.clear();
    } 
}
Dernière édition par davidcha le 13 janv. 2016 5:00, édité 2 fois.

Dahlil
Messages : 20
Inscription : 10 oct. 2015 11:16

Re: [TP11] Ajout d'un item dans caddy mais panier vide

Message par Dahlil » 12 janv. 2016 3:22

Salut David,

En effet il faut utiliser l'id qui est passé en paramètre dans "ShoppingCartDelegate", car ton test "testAddItemsToSeveralCarts()" ne passera pas.

Son but est de créer plusieurs paniers d'items avec des ids différents et si les paniers créés n'ont pas d'id pour les différencier, le programme considère que c'est un seul panier unique ayant le même nombre de contenu quelque soit la session (vu qque tu ne l'utilise pas), d'ou l'utilité de la session passée en paramètre dans la classe "ShoppingCartDelegate(String id)" => http://deptmedia.cnam.fr/phpBB2/viewtop ... =27&t=9734

Je ne sais pas si j'ai été clair.
Cordialement

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité