这个应该类似购物车的暂存/**
 * <p>Title: 购物车</p>
 * <p>Description: 实现对商城购物车的操作</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: 公司</p>
 * @author 网络信息部丰
 * @version 1.0
 */
package cartbean;
import java.util.*;
import java.sql.*;
import sqlbean.*;
public class CartBean {
  protected Hashtable itemHashtable = new Hashtable();
  public CartBean() {
  }
  public void setItemHashtable(Hashtable ht)
  {
    itemHashtable=ht;
  }
  public Hashtable getItemHashtable()
  {
    return itemHashtable;
  }  /**
   * 增加上商品到购物车
   * @param id int 商品ID
   * @param desc String 商品ISBN编号
   * @param price double 商品单价
   * @param qty int 数量
   */
  public void addItem(int id,String  isbn,String desc ,double price,int qty)
  {
    String[] item={Integer.toString(id),isbn,desc,Double.toString(price),Integer.toString(qty)};
    if(itemHashtable.containsKey(Integer.toString(id)))
    {
      String[] workItem=(String[])itemHashtable.get(Integer.toString(id));
      int workQty=Integer.parseInt(workItem[4]);
      qty=qty+workQty;
      workItem[4]=Integer.toString(qty);
    }
    else
      itemHashtable.put(Integer.toString(id),item);  }  /**
   * 修改购物车某种商品的数量
   * @param id int 商品ID
   * @param desc String 商品ISBN编号
   * @param price double 商品单价
   * @param qty int 数量
   */
  public void changeItem(int id,int qty)
  {
    if(itemHashtable.containsKey(Integer.toString(id)))
    {
      String[] workItem=(String[])itemHashtable.get(Integer.toString(id));
      workItem[4]=Integer.toString(qty);
    }
  }  /**
   * 删除购物车中的某种商品
   * @param id int
   */
  public void removeItem(int id)
  {
    if(itemHashtable.containsKey(Integer.toString(id)))
    {
      itemHashtable.remove(Integer.toString(id));
    }
  }
  public Enumeration getEnumeration()
  {
    return itemHashtable.elements();
  }  /**
   * 购物车商品总金额
   * @return double
   */
  public double getCost()
  {
    Enumeration enum=itemHashtable.elements();
    String[] workItem;
    double totalCost=0.00;
    while(enum.hasMoreElements())
    {
      workItem=(String[])enum.nextElement();
      totalCost=totalCost+(Integer.parseInt(workItem[4])*Double.parseDouble(workItem[3]));
    }
    return totalCost;
  }  /**
   * 购物车商品类数
   * @return int
   */
  public int getNumofItem()
  {
    Enumeration enum=itemHashtable.elements();
    String[] workItem;
    int num=0;
    while(enum.hasMoreElements())
    {
      workItem=(String[])enum.nextElement();
      num=num+Integer.parseInt(workItem[4]);
    }
    return num;
  }  /**
   * 清空购物车记录
   */
  public void ClearItem()
  {
    itemHashtable.clear();
  }  public void InsertCart(CartBean a,int PPUserID)
    { Connection con;
      try
        {
            Conn conn=new Conn();
            con=conn.getConn();
            Statement statement=con.createStatement();
            Enumeration b=a.getEnumeration();
            String c[];
            while(b.hasMoreElements())
            {
              c=(String[])b.nextElement();
              String values;
              values=PPUserID+","+c[0]+","+c[3]+","+c[4];
              statement.executeUpdate("insert into Cart(UserID,ProductID,Price,Num) values("+values+")");
            }
            conn.FreeConn();
        }//try
        catch(Exception e)
            {
                System.out.println(e.getMessage());
            } //catch
    }
}

解决方案 »

  1.   

    嗯,倒是其中之一中的好办法,但我在javascript判断后,如何去调用如上面的javabean来存储数据呢?
      

  2.   

    楼上 fanqingfeng(丰丰) 说的方法是正解,在购物车中都是这么实现的!!!
      

  3.   

    .....
    <BODY LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
    <jsp:useBean id="cart" scope="session" class="cartbean.CartBean"/>
    ....
    if(request.getParameter("pp_ID")!=null)
    {//增加
    //double price=new Double(request.getParameter("pp_Price"));
    String pp_Name=request.getParameter("pp_Name");
    byte[] tmpbyte=pp_Name.getBytes("ISO8859_1");
    pp_Name=new String(tmpbyte);
    String pp_price=request.getParameter("pp_price");
    String pp_isbn=request.getParameter("pp_isbn");cart.addItem(Integer.parseInt(request.getParameter("pp_ID")),pp_isbn,pp_Name,Double.parseDouble(pp_price),1);
    }////在jsp中部分代码
      

  4.   

    upupupupupupupupupupup
            up
            up
      

  5.   

    下一步是用的超链接,不能post数据,用request恐怕取不到数据吧
      

  6.   

    <jsp:useBean id="cart" scope="session" class="cartbean.CartBean"/>
    这个说明 在你没有关闭浏览器的时候 你的东西一直包存的 刚才附加的代码只是说明怎样使用bean而已  你在上一页已经插入数据保存的话  打开其他页面时  不用传递什么 也可以直接读取出来的
      

  7.   

    session太占内存了,还是用request的好
      

  8.   

    <html>
    <head>
    <script language=javascript>
    function check(form)
    {
    form.Result.value='B244|2424,C533|2324';
         alert(form.Result.value);
            form.submit();
           return true;
    }
    </script>
    </head>
    <body>
    <jsp:useBean id="buff" scope="session" class="testBuff">
    </jsp:useBean>
    <form action="#" method="POST" name="form1">
    <table border="0" align="center" cellpadding="0" cellspacing="0" width="98%">
    <%
    if(request.getParameter("Result")!=null)
    {
        String values=request.getParameter("Result");
        String[] str=values.split(",");
        for(int i=0;i<str.length;i++)
        {
           String tmp[]=str[i].split("|");
           buff.addItem(tmp[0],tmp[1]);
          }
      }.......
    <tr align="right">
        <td width=100% bgcolor="#ffffff" colspan="4" valign="middle" height="20" bordercolordark="#FFFFFF">
         <p align="right">
         <font color="#000000">共8步&nbsp;&nbsp;第1步</font>&nbsp;&nbsp;
        
        <img src="prev.gif" border=0></a>&nbsp;&nbsp;&nbsp;
       
         <a href="test.jsp?Page=2&PageCount=8"
         onclick="return check(form1);" >
       
        <img src="next.gif" border=0></a>&nbsp;&nbsp;
       </td>
     </tr>
    <tr align="center">
       <td colspan="4">
          <input type="hidden"  name="Result" value=""/>
       </td>
     </tr>
    </table></form></body></html>
    调试跟踪结果:request.getParameter("Result")一直为空,为什么?应如何解决?
      

  9.   

    终级解决方法是嵌入一个applet,其作用是与后台bean沟通,具体用法往上有很多
      

  10.   

    applet对于动态的构件页面控件太难,不易于使用,因为我的页数是不定的,而且每一页上的控件都是动态的,不是固定的,所以applet是没法了
      

  11.   

    fanqingfeng(丰丰) 说的采用购物车的方式倒是一个好的方法,但关键的问题是在于,在点击“下一步”的时候,将表单数据提交到bean有点问题
      

  12.   

    这问题需要JS处理了
    存储数据有不少办法,隐藏字段是个不错的选择。在点击下一步时,把表单所有的字段值存入隐藏字段(用特殊的分隔符隔开),在下一页再读取并解析。不过这种做法实在是不可取。还是到服务器访问一下吧,存到session里比什么都强。
      

  13.   

    我也考虑过用session来存,
    但在js中能存入session吗?因为我的数据在存入之前要对数据进行判断和处理呀?
    如何在js中把数据加入session中?
      

  14.   

    致:chancelin() 
    这问题需要JS处理了
    存储数据有不少办法,隐藏字段是个不错的选择。在点击下一步时,把表单所有的字段值存入隐藏字段(用特殊的分隔符隔开),在下一页再读取并解析。不过这种做法实在是不可取。还是到服务器访问一下吧,存到session里比什么都强。
    那应该如何存入?
    但在js中能存入session吗?因为我的数据在存入之前要对数据进行判断和处理呀?
    如何在js中把数据加入session中?
      

  15.   

    你用JSP的session保存,不就成了嘛。或者用隐藏域,每次传到下一页面便保存。方法有很多的。
      

  16.   

    致fmzbj(明正)
    1、
    用jsp的session,在javascript中如何用:
    <script><%...%></script>这样吗?我这样用,取出来的时候依然为空呀??
    2、用隐藏域
      <script>form.hidevalue='xxxx';</script>但我在request是依然为空,????
    你先看看我前面写的那些前提和我的具体情况
      

  17.   

    up!!!!!!!!!!!!!!!!!!!!!!!!!
    up!!!!!!!!!!!!!!!!!!!!!!!!!
    up!!!!!!!!!!!!!!!!!!!!!!!!!
      

  18.   

    http://community.csdn.net/Expert/topic/3289/3289778.xml?temp=.8990595
      

  19.   

    购物车的方法是可以实现:计数的方法,还可以保存数据,可以动态的增删数据,查询也能实现;目前这个我已测试;但问题是在对这个类进行增加数据之前,我在页面取得要增加的值是出现困难,由于页面上的控件采用动态控件,所以所有的值我只能通过客户端程序来处理,如用:document.getElementsByTags()来获得,最后生成一个特殊的字符串,然后传递个session,在服务器端来取得这个session的值,并存入那个类中。现在问题在于如何将这个字符串在客户端较笨重传递给服务器的session变量???
      

  20.   

    用CSS的display属性显示相应的HTML就行啦
      

  21.   

    camel4057(骆驼),我也出现同样问题,不过我暂作不分页处理。我还不一设想就是能不能将所有页面数据放在不同层或表格里,先隐藏所有只显示一个,点下一页则显示下一个,最后一起提交,就是不知道行不行的通。你要解决了这个问题,能不能告知一声?谢谢!
      

  22.   

    数据的判断和处理可以在客户端进行,用JS检查通过之后,在用JSP保存数据到Session,然后再转到下一步。
    如果只是为了数据的判断和处理而只用JS来处理,显然是舍本逐末了。很多时候需要客户端和服务器端的完美结合,才能更好的解决问题。
    只有把客户端的灵活性和服务器端的无所不能结合到一块,才是解决问题的好办法。