17.12.21,web学习第三十天,还有一年,努力吧青年 商城项目第三天购物车操作
30.商城项目第三天
1. Web层Servlet代码的抽取。使用?+参数提交的形式。将所有的 Servlet抽取到一个Servlet中。在该Servlet中的doGet()和doPost() 方法中拿到提交的参数再去调用应调的方法。
/*public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得请求的哪个方法的method String methodName = request.getParameter("method"); if("productList".equals(methodName)){ productList(request,response); }else if("categoryList".equals(methodName)){ categoryList(request,response); }else if("index".equals(methodName)){ index(request,response); }else if("productInfo".equals(methodName)){ productInfo(request,response); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } */ |
再次抽取:
将该ProductServlet的doGet()和doPost()方法注释,写一类 BaseServlet为ProductServlet的父类,重写service()方法。当访问 ProductServlet时会找到BaseServlet执行service()方法。(当某个 方法为propected时 ,反射拿不到该方法,徐改成public)
2. 购物车
获取input的内容不可以将.val()放到外边。
当Map获得内容需要.value。
这个地方尤其注意:在计算总的商品金额时,总金额=上一次的总 金额加上本次的小计。在session域中获得购物车时,记得名字要 相同,否则每次拿的都是新的购物车。
当跳转页面是重定向时,我们刷新页面,它会再走一次servlet, 总金额也会变大。所以使用servlet跳转时使用重定向。
1)以下解决方法是错误的:
之前在向Map中存商品时直接存,如果商品已存在,新的商品会 覆盖掉原来的商品,所以需判断,只需要将商品数更改即可。 更新商品数量的坑:(对象不是一个对象,获得的数据肯定不一样) 例: |
2)正确方法:在map判断时如果存在已经购买的商品,根据判断的参数key取得已经存在的商品,通过该商品对象的引用获得购买的数量计算小计。
|
删除单个商品:
错误做法:
|
正确做法:
将要删除的商品的pid传给servlet,然后该servlet获得session, session再获得存进去的cart购物车找到其中存的购物项,删 除后,要将总金额减去被删除的商品金额。
|
当购物车被清空,需要做的是使用jstl的if的表达式和el非空判 断表达式的给出 两种显示方式:<c:if test=”${empty }”></c:if>
清空列表:略
补充:
在jsp页面点击跳转<a></a>标签,可以给一个友好提示:confirm弹框
<script> Function xxx(){ If(confirm(“您是否同意?”)){ Xxx } } </script> |