При отображении элементов из класса корзины в файле jsp значения переопределяют предыдущие (сессия)

Я работаю над добавлением нескольких идентификаторов блюда, количества и описания еды.

Cart.java

package com.hotelordering;
public class Cart{
    int quantity;
    int menuid;
    String fooddesc;

public void setQuantity(int quantity){
    this.quantity=quantity;
}
public int getQuantity(){

    return quantity;
}
public void setMenuId(int menuid){
    this.menuid=menuid;
}
public int getMenuId(){
    return menuid;
}
public void setFoodDesc(String fooddesc){

    this.fooddesc=fooddesc;
}
public String getFoodDesc(){
    return fooddesc;
    }
}

AddToCart.jsp (получение значений параметров со страницы отправки)

<%@page import="java.sql.*" %>
<%@page import="java.util.*" %>
<html>
    <body>
    <form method="post" action="checkCart.jsp">
    <%  
        ArrayList<Cart> list= new ArrayList<Cart>();
        Cart cart = new Cart();
        Enumeration<String> parameters=request.getParameterNames();

        while(parameters.hasMoreElements())
            {
                String value=parameters.nextElement();

                if(value.equals("quantity"))
                {
                    try{
                        String[] q=request.getParameterValues(value);
                        for(String quant: q)
                        {
                            int quantity=Integer.parseInt(quant);
                            cart.setQuantity(quantity);
                            list.add(cart);
                            session.setAttribute("quantity",list);
                        }
                    }

                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }
                else if(value.equals("menuid"))
                {
                try{
                String[] m=request.getParameterValues(value);
                for(String menu: m)
                {
                    int menuid=Integer.parseInt(menu);
                    cart.setMenuId(menuid);
                    list.add(cart);
                    session.setAttribute("menuid",list);
                }
                }   
                catch(Exception e)
                {
                    e.printStackTrace();
                }   

                }
                else
                {
                try{
                    String[] fooddesc=request.getParameterValues(value);
                    for(String food: fooddesc)
                    {
                        cart.setFoodDesc(food);
                        list.add(cart);
                        session.setAttribute("fooddesc",list);
                    }
                }   
                catch(Exception e)
                {
                    e.printStackTrace();
                }   
            }
        }

        out.println("Added to cart !");
    %>
        <input type="submit" value="Check cart"><br>
    </form>
    <form action="displayCategory.jsp" method="post">
        <input type="submit" value="Add more item"><br>
    </form>
    </body>
</html>

checkCart.jsp
Отображение quantity, menuid и description из ArrayList, но оно отменяет предыдущее значение и снова повторяет последние введенные значения

<%@page import="java.sql.*,java.util.*" %>

<form action="test.jsp" method="post">

<%
    Cart cart=new Cart();

 ArrayList<Cart> list = (ArrayList<Cart>)session.getAttribute("quantity");

    for(Cart c:list)
    {
        out.println("Quantity" + c.getQuantity() + "<Br>");
        out.println("Menu id: " + c.getMenuId() + "<Br>");
        out.println("Food description: " + c.getFoodDesc() + "<Br>");
    }




%>



<input type="submit" value="submit">
</form>

ВЫХОДenter image description here

Отлаживайте, вы сами получите решение

Niranjan Kumar 10.09.2018 11:18
0
1
85
1

Ответы 1

Параметр значения списка (session.setAttribute) должен находиться вне цикла for в приведенном выше коде. Аналогично для других случаев. Поскольку вы устанавливаете значение списка внутри самого цикла, добавляется только конечное значение. И вам также необходимо инициализировать новый объект Cart для каждого объекта внутри цикла for. Инициализация вашей новой корзины должна быть внутри цикла for

   for(String quant: q) {
      cart=new Cart();
      int quantity=Integer.parseInt(quant);
      cart.setQuantity(quantity);
      list.add(cart);
}
    session.setAttribute("quantity",list);

Я уже пробовал это, но не работает. Выдает исключение NullPointerException. [1]: imgur.com/a/eorqo6p

lohith poojari 10.09.2018 14:41

Можете ли вы опубликовать полную трассировку журнала. Я также могу видеть некоторые исключения формата чисел

Karthik 10.09.2018 15:25

Другие вопросы по теме