把vector对象保存在session中,为什么到了另一个页面,取出vector对象却报错!
如题:
我写了个购物车的简单例子,一路走过来的那个难呀!
写道最后了,还是遇到个我自己解决不了的问题
我在写到购买的时候,想把购买一次商品的过程(例如把商品名,商品数量,本次的总价)放进一个vector中,然后把这个vector放入session中,这样,我在结算页面就很容易的取出来了
请大家看看我的代码:
balance.jsp代码:
<%@ page contentType="text/html;charset=gbk"%>
<%@ page language="java" import="java.util.*" %>
<%@ page import="java.sql.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'balance.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
结算页. <br>
<jsp:useBean id="spg" scope="page" class="login.Shopping"/>
<%//防止某些用户不进行登陆,直接想进入此页面
if (session.getAttribute("userName")==null){
response.sendRedirect("errorhandler.jsp");
}%>
<%
spg.setShoppingID(Integer.parseInt(request.getParameter("shoppingID")));
if(spg.executeBuy())
{
try
{
while(spg.rs.next())
{
String str=spg.rs.getString("shoppingName");
str=new String(str.getBytes("ISO-8859-1"),"gbk");
out.println("恭喜"+session.getAttribute("userName"));
out.println("您在本站购买了商品"+str);
out.println("购买的数量为:"+request.getParameter("count"));
float money=Integer.parseInt(request.getParameter("count"))*spg.rs.getFloat("shoppingPrice");
out.println("本次花费"+money+"RMB");
String spgName=str;
Vector v=new Vector();
v.add(spgName);//添加商品名
v.add(request.getParameter("count"));//添加数量
v.add(String.valueOf(money));//添加本次总价
session.setAttribute(spgName,v);//把vector添加到session中
}
}
catch(SQLException e)
{
out.println("结算页错误:"+e.getMessage());
}
}
%>
<a href="last.jsp">不买了,结帐</a>
<br>
<p><a href="index.jsp">继续购买</a></p>
</body>
</html>
last.jsp页面代码
<%@ page contentType="text/html;charset=gbk"%>
<%@ page language="java" import="java.util.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'last.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
最后页面. <br>
<%//防止某些用户不进行登陆,直接想进入此页面
if (session.getAttribute("userName")==null){
response.sendRedirect("errorhandler.jsp");
}%>
<%
out.println("尊敬的客户:"+session.getAttribute("userName")+" 您在本站购买了如下商品:<br>");
Enumeration e=session.getAttributeNames();
String s[]=session.getValueNames();
for(int i=0;i<s.length;i++)
{
out.println(s[i]);
}
out.println("<<<<>>>>");
while(e.hasMoreElements())
{
String str=(String)e.nextElement();
if(str.equals("userName"))
{
out.println(e.nextElement());
Vector v=(Vector)(session.getAttribute((String)e.nextElement()));//就是这行不认,报错是java.util.NoSuchElementException这个错误,nnd,明明是可以的呀,我的session从头到尾就放了个“userName”,在就是vector了,唉,郁闷哦
if(!v.isEmpty())
{
Iterator it=v.iterator();
while(it.hasNext())
{
out.println(it.next());
//out.println("商品名称:"+v.get(1));
//out.println("商品数量:"+v.get(2));
//out.println("该商品总价:"+v.get(3)+"<br>");
}
}
else
{
out.println("vector是空的");
}
}
}
session.invalidate();
%>
</body>
</html>
还请大家帮帮忙哦