求救!很急!JSP购物车统计商品数量的问题!

joe8282 2006-10-19 02:20:01
老师要我们做页面,好难,怎么搞都不行,大侠帮帮忙!
要求是这样的:修改下面的程序,实现统计购物车中每种商品的数量,在商品名称后面显示商品数量,不要重复显示商品!
代码如下:(代码如何修改请解答!)
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html;charset=GBK" %>
<%
String [] products = {"土豆","黄瓜","西红柿","茄子","海带"};
StringBuffer showProductList = new StringBuffer();
StringBuffer inCartProducts = new StringBuffer();
int i;
Vector inCart = new Vector();

if (session.getValue("cart")!=null)
inCart = (Vector)session.getValue("cart");

if (request.getParameter("add")!=null)
{
try{
i = Integer.parseInt(request.getParameter("item"));
inCart.addElement(new Integer(i));
}catch(NumberFormatException e){
}
}

if (request.getParameter("remove")!=null)
{
try{
i = Integer.parseInt(request.getParameter("item"));
inCart.removeElement(new Integer(i));
}catch(NumberFormatException e){
}
}

session.putValue("cart",inCart);

Integer [] s = new Integer[inCart.size()];
inCart.copyInto(s);

for (i=0; i<s.length; i++)
{
inCartProducts.append((i+1)+":"+products[s[i].intValue()]+"<br>\n");
}

for (i=0; i<products.length; i++)
{
showProductList.append("<option value=" + i + ">" + products[i] + "\n");
}
%>

<html>
<body>
<form method=POST action=cart.jsp>
<br>
<br><br>
<select Name="item">
<%=showProductList%>
</select>
<input Type=submit name="add" value="加入购物车">
<input Type=submit name="remove" value="从购物车删除">
</form>
<hr>
你的购物车中有下列商品:<br>
<%=inCartProducts%>
</body>
</html>
...全文
694 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小龙 2006-10-23
  • 打赏
  • 举报
回复
输出的时候学要遍历集合,同意2楼的说法
xk89191007 2006-10-22
  • 打赏
  • 举报
回复
这是web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>WebModule1</display-name>
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>untitled1.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/Se.Wdn</url-pattern>
</servlet-mapping>
</web-app>
xk89191007 2006-10-22
  • 打赏
  • 举报
回复
这是Servlet

package untitled1;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.*;
public class Servlet1 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws
IOException, ServletException {
Map<String,Integer> cart=this.getCart(request);
Map<String,String> values=(Map<String,String>)request.getParameterMap();
if(request.getParameter("add")!=null)
{
for(String value : values.keySet())
{
if(value.startsWith(":"))
{
String product=value.substring(1,value.length());
this.AddToCart(cart,product);

}
}
}
else
{
for(String value:values.keySet())
{
if(value.startsWith(":"))
{
String product=value.substring(1,value.length());
this.RemoveToCart(cart,product);
}
}
}
request.getRequestDispatcher("/jsp2.jsp").forward(request,response);
}

public Map<String,Integer> getCart(HttpServletRequest request)
{
if(request.getSession(true).getAttribute("cart")==null)
{
Map<String,Integer> temp=new HashMap<String,Integer>();
request.getSession(true).setAttribute("cart",temp);
}
Map<String,Integer> cart=(Map<String,Integer>)request.getSession(true).getAttribute("cart");
return cart;
}
//添加商品
public void AddToCart(Map<String,Integer> cart,String pruduct)
{
Integer count=cart.get(pruduct);
if(count==null)
{
cart.put(pruduct,1);

}
else
{
cart.put(pruduct,(int)(count+1));
}
}

//减少商品
public void RemoveToCart(Map<String,Integer> cart,String product)
{
int newCount=cart.get(product).intValue()-1;
if(newCount<=0)
{
cart.remove(product);
}
else
{
cart.put(product,newCount);
}
}

}
洪泉 2006-10-20
  • 打赏
  • 举报
回复
给购物车加一个属性用来统计货物就可以了吧!
xk89191007 2006-10-20
  • 打赏
  • 举报
回复
这是jsp2.jsp

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*"%>
<html>
<head>
<title>
jsp2
</title>
</head>
<body bgcolor="#ffffff">
<%
Map map=(Map)request.getSession().getAttribute("cart");
Iterator it=map.keySet().iterator();
while(it.hasNext())
{
Object product =it.next();
Object count=map.get(product);
%>
商品名称:<%=product%>
商品数量:<%=count%>
<hr />
<%
}
%>
</body>
</html>
xk89191007 2006-10-20
  • 打赏
  • 举报
回复
这是jsp1.jsp

<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
jsp1
</title>
</head>
<body bgcolor="#ffffff">
<form action="Se.Wdn" method="POST">
<input type="checkbox" name=":car" />汽车
<hr />
<input type="checkbox" name=":ship"/>轮船
<hr />
<input type="checkbox" name=":plane"/>飞机
<hr />
<input type="checkbox" name=":rock" />火箭
<hr />
<input type="submit" name="add" value="买"/>
<input type="submit" name="Remove" value="卖" />
</form>
</body>
</html>
xk89191007 2006-10-20
  • 打赏
  • 举报
回复
给你一个购物车的例子有两个JSP页面,一个Servlet,一个web.xml,贴在下面,自己研究一下.
lip009 2006-10-20
  • 打赏
  • 举报
回复
改过的代码:
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html;charset=GBK" %>


<%
String [] products = {"土豆","黄瓜","西红柿","茄子","海带"};
StringBuffer showProductList = new StringBuffer();
StringBuffer inCartProducts = new StringBuffer();
int i;
//集合类型改为Hashtable
Hashtable inCart = new Hashtable();

if (session.getValue("cart")!=null)
inCart = (Hashtable)session.getValue("cart");

if (request.getParameter("add")!=null)
{
try{
i = Integer.parseInt(request.getParameter("item"));
//判断集合中是否已经有改物品
if(inCart.get(i+"")==null){
//没有该物品,数量为1
inCart.put(i+"",1+"");
}else{
//已有该物品,数量加1
int num=Integer.parseInt((String)inCart.get(i+""));
inCart.put(i+"",(num+1)+"");
}
}catch(NumberFormatException e){
}
}

if (request.getParameter("remove")!=null)
{
try{
i = Integer.parseInt(request.getParameter("item"));
int num=Integer.parseInt((String)inCart.get(i+""));
if(num-1<=0){
//如果该物品数量小于2,删除该物品
inCart.remove(i+"");
}else{
//物品数量减1
inCart.put(i+"",(num-1)+"");
}
}catch(NumberFormatException e){
}
}

session.putValue("cart",inCart);

//Integer [] s = new Integer[inCart.size()];
//inCart.copyInto(s);
int n=1;
for (i=0; i<products.length; i++)
{
if(inCart.get(i+"")!=null){
inCartProducts.append(n+":"+products[i]+"    数量:"+inCart.get(i+"")+"<br/>\n");
n++;
}
}

for (i=0; i<products.length; i++)
{
showProductList.append("<option value=" + i + ">" + products[i] + "\n");
}
%>

<html>
<body>
<form method=POST action="">
<br/>
<br/><br/>
<select Name="item">
<%=showProductList%>
</select>
<input Type=submit name="add" value="加入购物车">
<input Type=submit name="remove" value="从购物车删除">
</form>
<hr>
你的购物车中有下列商品:<br/>
<%=inCartProducts%>
</body>
</html>
joe8282 2006-10-20
  • 打赏
  • 举报
回复
那怎么限制重复显示?
还有如果有重复的商品添加,又怎么统计出重复添加的商品数量?
谢谢!急!
joe8282 2006-10-19
  • 打赏
  • 举报
回复
那段程序测试是没问题的,只是没有实现统计商品数量的功能
zzd8310 2006-10-19
  • 打赏
  • 举报
回复
同意楼上
tcmis 2006-10-19
  • 打赏
  • 举报
回复
<%=showProductList%>
你这样写是错误的,对于
Vector inCart = new Vector();
你输出需要通过循环去输出显示在页面上:
for (int i = 0; i < inCart.size(); i++){

....
}

你需要把StringBuffer inCartProducts = new StringBuffer();
的值加入到列表项,这样是不行的,StringBuffer输出的是一串字符串啊。

SaintKaKa 2006-10-19
  • 打赏
  • 举报
回复
i = Integer.parseInt(request.getParameter("item"));
inCart.addElement(new Integer(i));
这段代码的作用是将无论是否已经添加到购物车的商品,仍然重新添加一次,从而会出现商品重复显示的问题

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧