0

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

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

以下是我的代码:

测试.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 然后点击第二个添加到购物车然后购物车应该被附加而不是覆盖。但目前它正在覆盖。

任何建议请...

4

3 回答 3

1

test2.jsp

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

...

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

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

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

于 2013-10-29T10:24:39.967 回答
1

这个过程看起来非常糟糕的编码存储购物车项目......但是当每次 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

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

于 2013-10-29T11:02:31.873 回答
0

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

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

希望它会有所帮助。

于 2013-10-29T10:38:44.857 回答