session实现购物车,集合存储,输入中文内容,再试图从集合中去掉该中文内容时的编码问题

lilyly 2009-04-09 01:20:29
页面1实现了向购物车中添加物品功能(字符串对象),addToCart.jsp代码如下:
 
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>My JSP 'p1.jsp' starting page</title>
</head>
<body>
<form action="addToCart.jsp">
请输入书名:<input name="book"><BR>
<input type="submit" value="添加到购物车">
</form>
<HR>
<%
String book = request.getParameter("book");
if(book != null) {
ArrayList cart = (ArrayList)session.getAttribute("cart");
if(cart == null) {
cart = new ArrayList();
}
cart.add(book);
session.setAttribute("cart",cart);
}
%>
<a href="cart.jsp">查看购物车</a>
</body>
</html>


---------------------------------------------------------------------------------------
另一个页面cart.jsp显示购物车内容,并提供删除功能

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>My JSP 'p1.jsp' starting page</title>
</head>
<body>
<%
ArrayList cart = (ArrayList)session.getAttribute("cart");
String book = request.getParameter("book");
cart.remove(book);
session.setAttribute("cart",cart);
for(int i=0;i<cart.size();i++) {
out.println(cart.get(i));
out.println("<a href=cart.jsp?book="+cart.get(i)+">删除</a>");
out.println("<BR>");
}
%>
</body>
</html>

---------------------------------------------------------------------------------------

但在第一个页面如果输入中文内容时无法在第二个页面删除。
知道是中文问题,但不知道如何解决。请各位高手帮忙!
...全文
275 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilyly 2009-04-24
  • 打赏
  • 举报
回复
还是没有解决!
Study_Work_2009 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Ghost_520 的回复:]

是出现乱码问题,还是 ArrayList 不能依据中文来删除某个元素?
[/Quote]
应该是这个问题吧
dingjun1 2009-04-10
  • 打赏
  • 举报
回复
1、 ArrayList cart = (ArrayList)session.getAttribute("cart");
这里没有报错吗?如果session中没有cart对应的对象,应该是返回NULL ,强制转换应该会报NullPointerException错吧。

2、如四楼说的页面加上,<meta http-equiv="contentType" content="text/html; charset=UTF-8" />

3、文件本身的编码也应该用UTF-8保存,不能是ANSI

4、ArrayList可以通过中文来删除元素

5、中文乱码引起的原因应该是在这里 String book = request.getParameter("book");
out.println(new String(request.getParameter("book").toString().getBytes("ISO-8859-1"),"UTF-8"));
<form action="addToCart.jsp"> 如果没有指定method="post" 会按get方式提交,相当于用地址传参数。





Ghost_520 2009-04-10
  • 打赏
  • 举报
回复

乱码问题:

如果页面上已经设置了 pageEncoding="UTF-8" 等,还是出现乱码的话,则只能使用方法转码了。
<%!
public String EncodingStr(String str){
String GBKshiming =new String(str.getBytes("ISO-8859-1"),"GBK");
return GBKshiming;
}
%>

<%
ArrayList cart = (ArrayList)session.getAttribute("cart");
String book = EncodingStr(request.getParameter("book"));
cart.remove(book);
session.setAttribute("cart",cart);
for(int i=0;i<cart.size();i++) {
out.println(cart.get(i));
out.println("<a href=cart.jsp?book="+cart.get(i)+">删除</a>");
out.println("<BR>");
}
%>

ArrayList 无法根据中文来删除元素:

这点要熟悉 List 的线性结构了,如果 ArrayList 不行的话,可以使用 Vector 试试,可以参考文章:http://www.99inf.net/SoftwareDev/Java/54540.htm
lilyly 2009-04-10
  • 打赏
  • 举报
回复
楼上的,这两个问题都存在。
Ghost_520 2009-04-10
  • 打赏
  • 举报
回复

是出现乱码问题,还是 ArrayList 不能依据中文来删除某个元素?
fanyuanwaifdl 2009-04-10
  • 打赏
  • 举报
回复
up
lilyly 2009-04-10
  • 打赏
  • 举报
回复
不行,page指令里已经指定为utf-8了,但还是出问题
spade24 2009-04-10
  • 打赏
  • 举报
回复
有些加上contentType="text/html; charset=UTF-8"就能解决页面中文乱码的问题,不知道你这个行不行!
lilyly 2009-04-10
  • 打赏
  • 举报
回复
感谢gezihello,Ghost_520.

我知道这代码不是很好地实现购物车,这个就是个简单的普通例子。

但我的目的不是想优化,就是想知道这种问题应该怎么解决,顺便学点解决中文问题的方法。
Ghost_520 2009-04-09
  • 打赏
  • 举报
回复

// 通过图书的 id 编号来删除对应的图书信息
ArrayList cart = (ArrayList)session.getAttribute("cart");
String bookId = request.getParameter("bookId");

for(int i=0;i<cart.size();i++) {
Book bookBean = (Book) cart.get(i);
if(bookBean.getId() == bookId){
cart.remove(bookBean); // 结束,不要依据中文来删除某个值,最好就是通过编号来对应删掉选中的图书信息。
}
}
session.setAttribute("cart",cart);
gezihello 2009-04-09
  • 打赏
  • 举报
回复
public int deleteBooks(int cartID, int bookID){
int state = 0;
cartListSql = "delete from cartlist where cartid = ? and bookid = ?";
pstmt = this.getPreparedstatement(cartListSql);
try {
pstmt.setInt(1,cartID);
pstmt.setInt(2, bookID);
} catch (SQLException e) {
System.err.println("SQL赋值错误:" + "SQL:" + cartListSql);
System.err.println("第一个参数:" + cartID + "第二个参数:" + bookID);
e.printStackTrace();
}
try {
state = pstmt.executeUpdate();
} catch (SQLException e) {
System.err.println("SQL执行错误:" + cartListSql);
e.printStackTrace();
}
this.close();
return state;
}



<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="bookcart.BookCartDAO" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>购物车系统--"耿赛猛"的购物车清单</title>
<link href="images/css.css" rel="stylesheet" type="text/css">
<script language="javascript">
<%--
*功能:更改确认
--%>
function changeConfirm(bookID,bookCount,disPrice){
<%--获得from:cartListFrom--%>
var oform = document.cartListForm;
<%--获得参数operBookID--%>
var oOperBookID = oform.elements["operBookID"];
<%--获得参数bookCount--%>
var oBookCount = oform.elements["bookCount"];
<%--获得会员更改的图书数量--%>
var oBookCountSpecify = oform.elements["bookCountSpecify" + bookID];
<%--获得参数operBookCount--%>
var oOperBookCount = oform.elements["operBookCount"];
<%--获得参数disPrice--%>
var oDisPrice = oform.elements["disPrice"];
<%--获得参数command--%>
var oCommand = oform.elements["command"];
<%--只有图书数量被更改且为正数时提交--%>
if ((oBookCountSpecify.value != bookCount) && (oBookCountSpecify.value > 0)){
if (confirm("您确定要更改图书数量吗?")){
oOperBookID.value = bookID;
oBookCount.value = bookCount;
oOperBookCount.value = oBookCountSpecify.value;
oDisPrice.value = disPrice;
oCommand.value = "modifybookcount";
oform.submit();
}
}
}

<%--
*功能:删除确认
*param bookID 需要删除图书的书号
*param bookCount 原有图书数量
*param disPrice 图书折扣价
--%>
function deleteConfirm(bookID,bookCount,disPrice){
<%--获得from:cartListFrom--%>
var oform = document.cartListForm;
<%--获得参数operBookID--%>
var oOperBookID = oform.elements["operBookID"];
<%--获得参数bookCount--%>
var oBookCount = oform.elements["bookCount"];
<%--获得参数disPrice--%>
var oDisPrice = oform.elements["disPrice"];
<%--获得参数command--%>
var oCommand = oform.elements["command"];
if (confirm("您确定要更改图书数量吗?")){
//command取默认值deletebook
oOperBookID.value = bookID;
oBookCount.value = bookCount;
oDisPrice.value = disPrice;
oCommand.value = "deletebook";
oform.submit();
}
}

<%--
继续选购时调用cartList.jsp
--%>
function continueShopping(){
var oform = document.cartListForm;
var oCommand = oform.elements["command"];
oCommand.value = "continueshopping";
oform.submit();
}
</script>
</head>

<body>
<form id="cartListForm" name="cartListForm" method="post" action="ControlServlet">
<%---command表示操作类型:
更改(modifybookcount)、删除(deletebook)、
下单(orderform)、继续购物(continueshopping)、
退出到登录界面(tologinpage),默认为下单(orderform)
--%>
<input type="hidden" name="command" value="orderform" />
<%--bookID 表示操作的对象(某本书)--%>
<input type="hidden" name="operBookID" />
<%--bookCount表示更图书原有的数量--%>
<input type="hidden" name="bookCount" />
<%--operBookCount表示更改后图书的数量--%>
<input type="hidden" name="operBookCount" />
<%--disPrice表示图书折扣价--%>
<input type="hidden" name="disPrice" />
<p align="center" class="dfont1">购物车系统--"<%=session.getAttribute("memberName")%>"的购物车清单</p>
<table width="790" border="0" align="center" cellpadding="5" cellspacing="2" bgcolor="green" class="table1">
<tr align="center" class="dfont2">
<td width="218" height="30" bgcolor="cyan" >图书名称</td>
<td width="150" bgcolor="cyan">市场价 </td>
<td width="150" bgcolor="cyan">折扣价</td>
<td width="100" bgcolor="cyan">数量</td>
<td width="60" bgcolor="cyan">删除</td>
</tr>
<%
//图书总数计数器
int totalCount = 0;
//图书总价计数器
float totalPrice = 0;
//总的差价
float totalSavePrice = 0;
BookCartDAO cartlist = new BookCartDAO();
int cartID = (Integer) session.getAttribute("bookcartID");
ResultSet rs=cartlist.getBookCartInfo(cartID);
//依次取出购物车中的图书信息
while (rs.next()){
%>
<tr bgcolor=cyan>
<%--图书名称--%>
<td>
<div align="left">
<%= rs.getString("bookName")%>
</div>
</td>
<%--图书市场价格--%>
<td>
<div align="right">
<%= rs.getBigDecimal("bookPrice",2)%>
</div>
</td>
<%--图书折扣价格--%>
<td>
<div align="right">
<%= rs.getBigDecimal("disPrice", 2)%>
</div>
</td>
<%--图书数量--%>
<td>
<div align="center">
<input
name="bookCountSpecify<%=rs.getString("bookID")%>"
type="text"
value="<%=rs.getString("bookCount")%>"
size="3"
maxlength="3">
<img src = "images/queding.gif"
onclick = "changeConfirm(
<%= rs.getString("bookID") %>,
<%= rs.getString("bookCount") %>,
<%= rs.getBigDecimal("disPrice", 2)%>)">
</div>
</td>
<%--删除--%>
<td>
<div align="center">
<img src = "images/shanchu.gif"
onclick = "deleteConfirm(
<%= rs.getString("bookID") %>,
<%= rs.getString("bookCount") %>,
<%= rs.getBigDecimal("disPrice", 2)%>)">
</div>
</td>
</tr>
<%
//各个计数器计数
//总数量计数
totalCount += rs.getInt("bookCount");
//总价+=折扣价单价*数量
totalPrice += rs.getInt("bookCount") * rs.getFloat("disPrice");
//总差价+=每本书的差价*数量
totalSavePrice += (rs.getFloat("bookPrice") - rs.getFloat("disPrice")) * rs.getInt("bookCount");
}
cartlist.closeResultSet(rs);
%>
<table width="700" border="0" align="center" cellpadding="5" cellspacing="2" bgcolor="green" class="table1">
<tr align="center" valign="middle">
<td bgcolor="cyan" align="center" valign="middle">
金额合计:
</td>
<td width="80" align="right" bgcolor="cyan">
<%=(float)(Math.round(totalPrice * 100))/100%>元
<% session.setAttribute("totalPrice",
(new Float((Math.round(totalPrice * 100))/100))); %>
</td>
<td align="center" bgcolor="cyan" align="center" valign="middle">
数量合计:
</td>
<td width="80" align="center" bgcolor="cyan">
<%=totalCount%>本
<% session.setAttribute("totalCount",new Float(totalCount)); %>
</td>
<td align="center" bgcolor="cyan" align="center" valign="middle">
你节省了:
</td>
<td width="80" align="right" bgcolor="cyan">
<%=(float)(Math.round(totalSavePrice * 100))/100%>元
</td>
</tr>
<tr bgcolor="#FCE9CB">
<td colspan="6" > </td>
</tr>
<tr align="center" bgcolor="cyan">
<td colspan="3" >
<div align="right">
<input type="button" name="conShop" onclick="continueShopping()" value="继续选购">
</div>
</td>
<td colspan="3" >
<div align="left">
<input type="button" name="purchase" onclick="document.cartListForm.submit()" value="下单"> 
</div>
</td>
</tr>
</table>
</table>
</form>
</body>
</html>

81,110

社区成员

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

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