【问题标题】:Add To Cart Doesn't Work添加到购物车不起作用
【发布时间】:2013-10-29 19:02:31
【问题描述】:

您好,我正在尝试在我的 Web 应用程序中实现添加到购物车机制。 所以这就是为什么我临时创建了 3 个实现这种机制的 JSP 页面。但它不能正常工作。

我还创建了唯一的会话来识别特定的用户会话,但它实际上并没有在所有页面中实现。

以下是我的代码:

test.jsp

<%
    Random rkey = new Random();
    int randomkey = Math.abs(rkey.nextInt());
    String sdata = "keyur"+randomkey;   

    DateFormat dateFormat = new SimpleDateFormat("HHmmss");
    Calendar cal = Calendar.getInstance();

    String sess = "keyur"+randomkey+dateFormat.format(cal.getTime());
    session.setAttribute("KEYUR", sess);
%>
<% response.sendRedirect("test1.jsp"); %>

test1.jsp

Hello <%= session.getAttribute("KEYUR")%>

<%
    String a="shirt",b="jeans";
    int a1 = 10,b1=20;
    Double a2=100.00,b2=200.00;
%>
<br><br>
A : <a href="test2.jsp?item=<%=a%>&qty=<%=a1%>&price=<%=a2%>" id="a1" name="a1">Add To Cart</a><br><br>
A1 : <a href="test2.jsp?item=<%=b%>&qty=<%=b1%>&price=<%=b2%>" id="a2" name="a2">Add To Cart</a>

test2.jsp

Hello <%= session.getAttribute("KEYUR")%><br><br><br><br>

Your Cart :
<%
    List<String> pname = new ArrayList<String>();
    List<Integer> pqty = new ArrayList<Integer>();
    List<Double> ppr = new ArrayList<Double>();
%>
<%
    pname.add(request.getParameter("item"));
    pqty.add(Integer.parseInt(request.getParameter("qty")));    
    ppr.add(Double.parseDouble(request.getParameter("price")));
    Double total=0.00;
%>
<br><br>
<%
    for(int i = 0;i < pname.size();i++)
    {
        String name = pname.get(i);
        Integer qty1 = pqty.get(i);
        Double pr1 = ppr.get(i);        
        %>
            Name : <%= name %><br>
            Qty : <%= qty1 %><br>
            Price : <%= pr1 %><br><br>
            Total : <%= total += qty1*pr1 %> 
        <%      
    }
%>

现在我已经获取了静态数据,如果它可以工作,那么我将尝试使用动态数据。 有人告诉我为什么购物车中只显示一件商品。 假设用户点击添加到购物车然后它重定向到 test2.jsp 并再次返回到 test1.jsp 然后点击第二个添加到购物车然后购物车应该被附加而不是覆盖。 但目前它正在覆盖。

任何建议请...

【问题讨论】:

    标签: java jsp cart


    【解决方案1】:

    test2.jsp

    List<String> pname = new ArrayList<String>(); //size is 0
    

    ...

    pname.add(request.getParameter("item")); //size is 1
    

    这就是为什么你只得到一件物品。

    顺便说一句,不要使用 JSP scriptlets;使用 JSTL 或编写自己的标签(查找 Java 自定义标签)

    【讨论】:

    • 但是假设我想添加多个项目,那么我必须做什么?
    • 继续添加到 pname。无论如何,这是错误的方法。首先,您应该有一个类来描述您的购物车对象,它包含商品、单价和数量,称之为 CartItem。然后你应该使用 List 并保存在 Session 中。最后,您应该从会话中获取 List 并遍历您的列表。祝你好运
    • 我尝试在 pname 中添加更多项目,但它只存储一项并显示它。我知道这是错误的方法,我知道我必须为购物车创建单独的类来存储物品。我只是问这种方式有可能吗?
    • 存储信息:您必须将您的对象(CartItem、Strings,这取决于您!)存储到一个列表中,然后将该列表放入会话中。阅读信息:从会话中获取列表,然后循环列表并显示您的对象。有意义吗?
    • 我有点明白了。如果您有一些小示例或任何链接,请先生与我分享。我需要尽快解决它。我不明白如何存储和读取会话中的列表...
    【解决方案2】:

    这个程序看起来非常糟糕的存储购物车物品的编码...... 但是您仍然可以在 List 中存储任意数量的内容 在您的页面中,每次一个 Test2.jsp 调用新的 keywprd 时都会初始化一个新的购物车列表.. 这就是为什么以前的价值会丢失.... 而不是这段代码

    <%
    List<String> pname = new ArrayList<String>()
    List<Integer> pqty = new ArrayList<Integer>();
    List<Double> ppr = new ArrayList<Double>();
    %>
    

    使用减速块进行减速

    <%!
    List<String> pname = new ArrayList<String>();
    List<Integer> pqty = new ArrayList<Integer>();
    List<Double> ppr = new ArrayList<Double>();
    %>
    

    之后,您可以存储任意数量的值...。但是可能会有一些重复值...要删除重复值,您可以在 List 的位置使用 Set

    我想你已经得到了你的问题的答案.....

    【讨论】:

      【解决方案3】:

      之所以只显示一项,是因为您在 Lists pname, pqty, ppr 中只插入一项。

      使用 for 循环依次插入。所以它包含多个订单或项目..

      希望它会有所帮助。

      【讨论】:

      • 您是否从页面 Test1.jsp 中注意到只有一项添加到购物车的请求正在发送,所以在这种情况下什么不起作用..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2013-07-15
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多