JAVA编程购物车问题大神们帮帮忙
我想做一个购物车的功能..但是不知道如何做,我有一个用HashMap的购物车例子JSP页面的.(HashMap我用不来.还没有搞懂他的工作原理)但是现在我要用MVC+st...
我想做一个购物车的功能 ..但是不知道如何做,我有一个用HashMap的购物车例子JSP页面的.(HashMap我用不来.还没有搞懂他的工作原理)但是现在我要用MVC+struts来实现.我还是用不来..我想问下.怎么实现呢? 我最初的想法是.把ID.名字还有数量存到BookInfo book = new BookInfo();中.然后建立一个list.把book加到list里面去.然后把list存到session中去.然后JSP页面用标签显示,但是突然想到好像每次访问servlet.服务器就会自动创建一个新的session.这样的话.我的列表每次只显示一条纪录了.这就不是我想要的了...........能不能有办法解决啊? 给我些提示或者一些关键代码谢谢. 或者用别的方法?希望可以帮我解决下.谢谢.分不够我可以加..要关键的代码.用其它的方法的话希望能给关键性代码
展开
2个回答
展开全部
不会用Map,建议先学习怎么用。不能熟练使用集合框架,严重影响开发效率。基础很重要,没基础,什么都不行。 当然,购物车可以不用Map也能实现。 // 从session里取购物车对象 List cart = (List) request.getSession().getAttribute("cart"); // 如果session里没有,创建 if (cart == null) { cart = new ArrayList(); } // 创建Book对象 BookInfo book = new BookInfo("001", "abc", 1); // 是否购物车里已经有 if (!cart.contains(book)) { // 没有的时候直接add cart.add(book); } else { // 有的时候,取出 BookInfo tmpBook = (BookInfo) cart.get(cart.indexOf(book)); // 加数量 tmpBook.setCount(tmpBook.getCount() + book.getCount()); } // 把cart放到session里 request.getSession().setAttribute("cart", cart); 补充: 注意:BookInfo要重写equals方法,上面的代码材有效。下面这个BookInfo重写了equals方法,当id相同时,认为是同一本书。如果想用其他方法判断,自己可以重写。 public class BookInfo { private String id; private String name; private int count; public BookInfo(String id, String name, int count) { this.id = id; this.name = name; this.count = count; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; BookInfo other = (BookInfo) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } } 追问: BookInfo tmpBook = (BookInfo) cart.get(cart.indexOf(book)); 这句里面的cart.indexOf(book)是用于什么用的啊?我学了半年JAVA..半年的JSP+servlet+ 框架 呢..我还是新手哈.. 回答: cart.indexOf(book)是查找对象在List中的 索引 。 cart.get(cart.indexOf(book))是根据找到的索引取对象。 追问: 现在能加入 购物车 了.但是不能过滤相同ID的这个怎么样在servlet里面解决呢?我用的是struts的ACTION和form的 回答: 我上面不是写了BookInfo类吗!为了让List能把相同ID的BookInfo对象认为是“同一本书”,要重写equals方法。 cart.contains(book)是判断List是否有某Book时,会调用BookInfo的equals方法。举个例子,用上面那个BookInfo类。new BookInfo("1","abc",1)和new BookInfo("1","abc",1)会被List认为是相同的BookInfo,因为id都是“1”。 追问: 我是用struts中的form来写的..我加入到form中.我程序就出错了....我在实验下吧..
展开全部
一、创建购物车类 CartItem 属性:商品类对象,商品数量 二、创建添加商品至购物车的Servlet 添加步骤: 1.在servlet中取出session< HttpSession session=request.getSession(false) >; 2.用取出的session取出保存的购物车对象 CartItem <CartItem cart=(CartItem)session.getAttribute("cart")>; 3.判断购物车对象是否为null,如果为null 则创建购物车对象,将商品对象保存至购物车,数量为1,如果不为null则执行下面的操作 4.再次向购物车中添加商品时,先判断该商品在购物车中是否存在,如果存在则修改该商品在购物车中的数量+1,如果不存 在,则将商品对象保存至购物车,数量为1; 追问: 流程我清楚的.我现在想知道的是.如何每次访问servlet让servlet只为用户提供一个session.而不是每次访问就创建一个新的.并且是多个用户同时访问时.创建多个session. 像我现在做的程序是.只要每次访问则马上就创建了一个新的servlet了 回答: 在每次访问的时候先判断用户的那个session是否存在如果存在就不创建啊 只是一个判断的步骤哈 追问: 没有用户session.我这是允许用户直接添加 购物车 .需要购买时再登录...所以.这是用session的难点.目前不得其解啊 回答: 用户没有session那就判断 购物车 的session是否存在啊用户首次添加时创建一个 二次添加时判读如果有了购物车的session 就直接给session改值了啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询