Estoy intentando agregar un nuevo producto al carrito. Cuando agrego el primer producto, se agrega correctamente. Cuando el producto ya existe, se incrementa correctamente, pero cuando hay productos existentes en el carrito e intenta agregar un nuevo producto, agrega 1 más en cantidad.

protected void addToCart(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    HttpSession session = request.getSession();
    int productId = Integer.parseInt(request.getParameter("productId"));
    if (session.getAttribute("cart") == null) {
        ArrayList<Item> item = new ArrayList<>();
        item.add(new Item(ProductModel.getProduct(productId), 1));
        session.setAttribute("cart", item);
    } else {
        ArrayList<Item> item = (ArrayList<Item>) session.getAttribute("cart");
        for (int i = 0; i < item.size(); i++) {
            // This line increment the product correctly
            if (item.get(i).getProduct().getId() == productId) {
                item.get(i).setQuantity(item.get(i).getQuantity() + 1);
            } else {
                // Here the product is added twice instead of once
                item.add(new Item(ProductModel.getProduct(productId), 1));
            }
            session.setAttribute("cart", item);
        }
        
    }
}

¿Cuál sería el problema?

0
JBstrap 28 ago. 2020 a las 14:06

1 respuesta

La mejor respuesta

El problema es que el código agrega un nuevo artículo al carrito cuando encuentra un artículo que no tiene el mismo ID de producto. Lo que debería hacer es agregar un nuevo artículo si ningún artículo tiene el mismo ID de producto.

Puede usar una variable booleana para realizar un seguimiento de si encontró un artículo con un ID de producto coincidente o no, y agregar un nuevo artículo en el bucle si no lo encontró.

boolean foundExistingProduct = false;
ArrayList<Item> item = (ArrayList<Item>) session.getAttribute("cart");
for (int i = 0; i < item.size(); i++) {
    if (item.get(i).getProduct().getId() == productId) {
        item.get(i).setQuantity(item.get(i).getQuantity() + 1);
        session.setAttribute("success", "An existing product is added to shopping cart!");
        request.getRequestDispatcher("Products").forward(request, response);
        foundExistingProduct = true;
        break;
    }
}

if (!foundExistingProduct) {
    item.add(new Item(ProductModel.getProduct(productId), 1));
    session.setAttribute("success", "Another product is added to shopping cart!");
    request.getRequestDispatcher("Products").forward(request, response);
}

session.setAttribute("cart", item);
1
Joni 28 ago. 2020 a las 11:21