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;
}
}
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();
}
}