您好我正在尝试在我的网络应用程序中实现添加到购物车机制。 这就是为什么临时我创建了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然后点击第二个添加到购物车然后推车应附加不覆盖。 但目前正在覆盖。
任何建议请......
答案 0 :(得分:1)
<强> test2.jsp 强>
List<String> pname = new ArrayList<String>(); //size is 0
...
pname.add(request.getParameter("item")); //size is 1
这就是为什么你只得到一件物品。
顺便说一句,让自己受宠,不要使用JSP scriptlet;使用JSTL或编写自己的标签(查找Java Custom标签)
答案 1 :(得分:1)
这个看起来非常糟糕的代码存放购物车物品...... 但是你仍然可以在List中存储你想要的数量 在你的页面中每次Test2.jsp调用new 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>();
%>
之后你可以存储你想要的任何数量....但是可能会有一些重复的值...删除重复你可以在列表的地方使用Set
我认为你已经得到了你的查询答案.....
答案 2 :(得分:0)
仅显示一个项目的原因是因为您只在列表pname,pqty,ppr中插入一个项目。
使用for循环按顺序插入。所以它包含多个订单或项目..
希望它会有所帮助。