前言:第一次在CSDN的博客写东西。之所以会开始这样,还是很感谢我的一位同学说的:把做好的东西发到博客上,让其他人受惠。当然我知道写个几百字并不代表自己就是大神,如果发表错了,还会误导他人。但还是很想发表一下自己的见解,当作与他人交流,已经记下自己做作业的经历和尝试吧!
我们学校要求我们在暑假与他人组队,完成一个大作业,最主要都是依靠数据库,在jsp或者php等平台开发。由于之前做了个xml的大作业,所以也很顺理成章地用jsp+myeclipse+mysql来开发。我们的大作业是制作一个网上商城的简单网页,而我负责的任务则是完成里面购物车的功能,包括添加商品到购物车,生成订单,查看订单信息等。
前面的背景铺垫交代了,至于数据库表的建立和它的javabean的建立,包括其中的数据库操作我就不一一贴代码了。在这里还是很感谢这博客主http://blog.csdn.net/javaeeteacher/article/details/1806692里的文章的帮助。由于之前并没有网络开发的大多经验,有人讲解一下,就能立刻清晰可见。
添加商品到购物车的实现是用session来保存购物车的信息,当然如何做到淘宝的效果?能够永远保存用户的购物车?我之前参与的xml大作业的同学,他是在调用一个session的函数,session生命周期结束的时候,会调用类似destory()的函数,然后看购物车的数据是否发生改变,如果是,则写回进数据库。这样就不用每一次都对购物车修改,都要进行数据库的操作。
他之前并没有做淘宝checkbox的效果,就是通过checkbox来选择商品。一开始我是用js来获取checkbox的value,然后看是否为checked,后来也可以在IE上运行,但是代码就变得臃肿了,因为我是每获得一个checkbox的确认,就把请求发送到servlet,然后再封装商品信息。因为当时候我实在想不到其他办法,可以一次性动态把checkbox的数据发送到servlet。当然后来我进行修改了,才发现自己很愚蠢,这自然是后话了。
在IE上可以运行,但在chrome就不行了,这才引起我真正想要解决这问题。chrome对js的window.open响应,不同于IE,它貌似会忽略前面的window.open,而直接跳到最后一个,这个才能真正有用。所以我的代码就失效了。于是我开始找各种方法,用其他发送请求到servlet的方法来替代?找不到。。用JQuery来改写?一时间也很难学会。而且到了后来我更下定决心,为什么别人不用那么臃肿的代码,而我却要那么费劲了。
于是我在网上查找其他方法,发现了一个很简单的解决方案,在那jsp页面用js来验证是否checked,然后在servlet那端用getParameterValues(“name”)来获取checkbox的值,其中的name为checkbox相同的name,而value则为checkbox对应的商品id。根据网友的说法,被勾选的checkbox才会得到值,没有勾选的则是null,getParameterValues(“name”)会自动过滤。看到这种说法,我就知道如此处理checkbox的肯定是可以的.
以下是checkbox的代码:
<input type="checkbox" name="choice" value="<%=temp.getPb().getProduct_id()%>">
//这是在servlet端的获取 <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">String[] checkbox = request.getParameterValues("choice");</span></span>