今天做了一个购物车的小测试,建了一个页面shop.jsp,里面有一个选择商品的form表单。将用户选择的商品提交到另外一个页面 showthings.jsp。showthings.jsp负责将show.jsp提交过来的数据添加到session中保存,并显示用户选择的商品(从show.jsp提交过来的数据都可以显示)。在showthings.jsp中有一个链接,代码如下:<a href="shop.jsp">再次购物</a>。现在点这个链接再次选择商品并提交,发现showthings.jsp里商品的数据始终都是刚才提交的数据,并没有累加。我要求的效果是让重新选择的商品数累加。但是一直都是显示新的接交数。我发现session的数据丢失了。我想知道怎样才可以让session的数据不丢失。
代码如下:
//shop.jsp页面:
<form action="showthings.jsp" method="post">
  书籍:<input type="checkbox" name="item" value="book"/>
  电脑:<input type="checkbox" name="item" value="computer"/>
  汽车:<input type="checkbox" name="item" value="car"/>
  <input type="submit" name="sbumit" id="submit" value="提交"/>
</form>
//showthings.jsp页面
<%
  Map<String , Integer> itemMap = (Map<String , Integer>)session.getAttribute("itenMap");
  if(itemMap == null){
  itemMap = new HashMap<String , Integer>();
  itemMap.put("书籍", 0);
  itemMap.put("电脑", 0);
  itemMap.put("汽车", 0);
  }
  String[] buys = request.getParameterValues("item");
  for(String str : buys){
  if(str.equals("book")){
  int num1 = itemMap.get("书籍").intValue();
  itemMap.put("书籍", num1+1);
  }
  else if(str.equals("computer")){
  int num2 = itemMap.get("电脑").intValue();
  itemMap.put("电脑", num2+1);
  }
  else if(str.equals("car")){
  int num3 = itemMap.get("汽车").intValue();
  itemMap.put("汽车", num3+1);
  }
  }
  session.setAttribute("itemMap", itemMap);
%>
<body>
   
  你购物车上的物品有:<br/>
  书籍:<%=itemMap.get("书籍")%>本<br/>
  电脑:<%=itemMap.get("电脑")%>台<br/>
  汽车:<%=itemMap.get("汽车")%>台<br/>
  <a href="shop.jsp">再次购买</a>
</body

解决方案 »

  1.   

    Map<String , Integer> itemMap = (Map<String , Integer>)session.getAttribute("itenMap");确定那个getAttribute里的是"itenMap"?
      

  2.   

    session.setAttribute("itemMap", itemMap);
    你最后用的是itemMap2次不一样,当然不会保存了
      

  3.   

      itenMap  → itemMap楼主仔细点儿。这种情况下一定要比较key看是否一致。
      

  4.   

      session.setAttribute("itemMap", itemMap);
      session.getAttribute("itenMap");
    肯定为空值....
      

  5.   

    LZ按照LS说的调试一下吧。加油!^_^
      

  6.   

    当你写session.getAttribute()里面的参数的时候多一个心眼,怕写错?复制过来,就少了一些不必要的错误
      

  7.   

    这种情况下楼主可以设置断点来追踪。
    1,跟踪session.getAttribute("itenMap");先确认这里是否获得值。
    2,跟踪session.setAttribute("itemMap", itemMap);再确认这里是否正确设值。
    如果2正确设值了1却没有获得值的话,我相信楼主应该会很快发现问题的。
      

  8.   

    笔误,严重的笔误!还是一楼的仔细啊,因为n跟m在一起,按m时按到n了。