在JSP中怎样实现购物车计数?

在JSP中怎样实现购物车计数?,第1张

购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处理的需要,而这一点在有些电子商务活动中很有必要。XML的出现使得网络上传输的数据变得有意义起来,我们可以根据不同的要求以不同的样式将一个购物车的内容显示出来。

本文将详细分析一个由Java实现的基于XML的购物车。下面是一个包含了五件商品的购物车的陵世XML内在结构:它的根元素为cart,total元素表示购物车内的总金额,每个item元素表示一件商品,item里的子元素分别标明了该商品的具体信息,可根据实际情况添加、修改或删除。

在这里,需要建立一个表示购物车的类:XMLCart.java,它是一个JavaBean,所以它包含了一个空的构造函数。这个类包含了购物车的一些基本功能: 生成一个空的购物车,往购物车里添加商品,删除购物车里的商品,改变购物车内商品的数量以及清空购物车等。它拥有一个全局私有变量“private XMLDocument myCart”,myCart用来存储购物车里的详细内容,购物车的基本功能就是对它的 *** 作,它的类型是XMLDocument,即一个XML文档。这样,对购物车的 *** 作就转换成对myCart中的子元素的添加、删除,及元素值的计算、修改等。

1. 清空购物车

清空购物车即生成一个空的购物车。这里裤汪顷空购物车是一个含有根元素cart及其元素total的胡陆XML文档,total元素是购物车的总金额,它的初始值为0,其XML具体形式如下:

<?xml version=‘1.0’ encoding=‘gb2312’?>

<cart>

<total>0</total>

</cart>

将这个XML字符串由parseString函数转换成XMLDocument存入myCart。

其代码如下:

public void emptyCart() throws IOException,SAXException{

String stringCart=“<?xml version=‘1.0’encoding=‘gb2312’?>”+

“<cart><total>0</total></cart>”

myCart=parseString(stringCart)

}

2. 添加商品

添加商品,即将传入的item元素添加到根元素cart里,

其中item里包括商品详细信息,

同时计算total的值。其代码如下:

public void addItemToCart(String stringItem)

throws IOException,SAXException{

//将item由String转换为XMLDocument

XMLDocument itemAdded=parseString(stringItem)

//取出item节点,并复制它

NodeList itemList=itemAdded.getElementsByTagName(“item”)

Node item=itemList.item(0)

Node cloneItem=item.cloneNode(true)

//如果购物车为空,则构造一个新的购物车

if(isCartEmpty()){

myCart.emptyCart()

}

//如果该商品不在购物车中,则插入该商品,并计算总金额

if(!isItemExist(item,myCart)){

//取myCart的根元素,并将复制的item节点添加到后面

Element cartRoot=myCart.getDocumentElement()

Node cartNode=cartRoot.appendChild(cloneItem)

computeTotal()//计算总金额

}

}

3. 删除商品

删除商品,即根据商品代码将该商品的item元素

从myCart的根元素cart中删除,

并重新计算total的值:

public void moveItemFromCart(String id){

//取出以item为单位的节点集cartList以及根元素cartRoot

NodeList cartList=myCart.getElementsByTagName(“item”)

Element cartRoot=myCart.getDocumentElement()

//在cartList中查找代码为选中id的商品

for(int x=0x<cartList.getLength()x++){

Node itemNode=cartList.item(x)

String idValue=itemNode.getFirstChild().

getFirstChild().getNodeValue()

//如果找到,则从cartRoot中删除该节点,并跳出循环

if(idValue.equals(id)){

itemNode=cartRoot.removeChild(itemNode)

break

}

}

computeTotal()//计算总金额

}

4. 改变商品数量

根据客户在页面上所填的数量,修改myCart中quantity,

并重新计算total:

public void addQuantityToCart(String qnty) throws

IOException,SAXException{

//将传过来的包含商品数量的一组XML字符串转换为XML文档

XMLDocument quantityChanged=parseString(qnty)

//取出包含新数量的quantity节点集和myCart中的quantity节点集

NodeList quantityList=quantityChanged.getElementsByTagName(“quantity”)

NodeList cartList=myCart.getElementsByTagName(“quantity”)

//循环改变商品的数量

for(int x=0x<cartList.getLength()x++){

//将新quantity的值赋给myCart中相应的quantity中去

String quantity=quantityList.item(x).getFirstChild().getNodeValue()

cartList.item(x).getFirstChild().setNodeValue(quantity)

}

computeTotal()//计算总金额

}

5. 计算总金额

即计算total的值,其中total=∑(price*quantity):

public void computeTotal(){

NodeList quantityList=myCart.getElementsByTagName(“quantity”)

NodeList priceList=myCart.getElementsByTagName(“price”)

float total=0

//累加总金额

<input type="text" id="count" value="<%=goods.getCount()%>" size="1"/>你每个商品的数量都是这个,页面出现有多个id="count" 的input域

document.getElementById("count").value当id是count的input唯一的时候才隐芹能取到正确的

<input type="text" id="<%=goods.getProId()%>_count" value="<%=goods.getCount()%>" size="1"/>

数量的Input的id可以换一下让他变成唯一的,例如商品id,这样就唯一了

<a href="javascript:go('<%=goods.getProId()%>')">

<img src="img/changecount.gif" title="修改商品数量" border="0"灶历毕 width="15" height="15" style="position: relativetop:2px"/>

</a>

每次调用go的时候把input的商品id传过去,

function go(proId){

var str

str="changecount.jsp?count="烂孙

str+=document.getElementById(proId+"count").value

str+="&&"

str+="proId="

str+="<%=goods.getProId()%>"

window.location=str

}

这样应该就可以了,主要是因为你那个Input 的id重复了,

<script language='javascript'>

function checkSum()

{

var sum = 0

for(var i=0i<document.form1.elements["writer"].lengthi++)

{

if(document.form1.elements["writer"][i].checked)

{

sum = sum +parseInt(document.form1.elements["writer"][i].value)

}

}

totalprice.innerText = sum +" 元"

}

</script>

<form method=post name=form1>

<input type="checkbox" name=writer value="34" onclick="checkSum()">韩国耳饰tm56(34元)<br>

<input type="checkbox" name=writer value="46" onclick="checkSum()">纯银吊坠tc34(46元)<br>

<input type="checkbox" name=writer value="30" onclick="checkSum()">黄莺手并雹镯ta345(30元团知)<br>

<input type="checkbox" name=writer value="40" onclick="checkSum()">翡翠玉镯1346(40元)<br>

<input type="checkbox" name=writer value="50" onclick="checkSum()">天涯耳饰1233(50元)<br>

<br>

总价为:<span id="totalprice">0 元</绝或帆span>

</form>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8031287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存