在一个jsp文件中显示cart类中的项目时,这些值将覆盖前一个(SESSION)

时间:2018-09-10 08:57:41

标签: java jsp servlets

我正在添加多个菜品ID,数量和食物说明。

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中的menuiddescriptionArrayList,但它会覆盖先前的值并再次重复最后输入的值

<%@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

1 个答案:

答案 0 :(得分:0)

在上面的代码中,列表值设置(session.setAttribute)应该在for循环之外。 其他情况也是如此。 由于您是在for循环本身内部设置列表值,因此仅添加最终值。而且您还需要为for循环中的每个对象初始化新的Cart对象。您的新购物车初始化应该在for循环内

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