商城详情页点击购物按钮并且在购物车无刷新增加数量,请问一下这个功能如何实现
并且在购物车无刷新增加数量 是什么意思你说的是异步的更新吗? 类似Ajax? 这个就是Ajax可以实现的,你可以了解一下Ajax
在页面定义一个变量表示数量,点击一次就加一,点击同时后台数据库执行数据更新。(自学新手,不行勿喷)
将商品保存到session对象中去,同时创建map集合,以键值对的形式将商品(id:Product)保存
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import dao.ProductDao;
import domain.Product;
public class ProdectServlet extends HttpServlet {
//创建map,为购物车
HashMap<String, Product> map = new HashMap<String, Product>();
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String pid = request.getParameter("pid");
int count = Integer.parseInt(request.getParameter("count"));
HttpSession session = request.getSession();
Object gwc= session.getAttribute("gwc");
if (gwc == null) {
session.setAttribute("gwc", map);
}
if (!map.containsKey(pid)) {
Product p = new ProductDao().findById(pid);
p.setNum(count);
map.put(pid, p);
} else {
Product p = map.get(pid);
p.setNum(p.getNum() + count);
}
for (Product product : map.values()) {
System.out.println(product.getPname());
}
PrintWriter out = response.getWriter();
out.println("商品加入购物车成功<br/>");
out.println("<a href='/day13-manager/product.jsp'>请继续浏览商品</a><br/>");
out.println("<a href='/day13-manager/gwcar'>浏览购物车</a><br/>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
使用ajax异步刷新可以完美解决。
主要是我点击商品详情页的加入购物车按钮,然后购物车的商品数据增加(前提是购物车里面已经有这个商品了)
现在推荐购物车数据存数据库,只要用户加入购物车这条订单就生成了,只不过订单的状态是购物车状态,当然还有待付款,带发货待收货等状态。
前端用ajax结合jquery可以轻松实现,ajax和jquery就不说了,首先你要知道是什么,在这个用例里面,ajax用来异步提交和接收,jquery用来动态更新购物车列表,
你可以绑定一个时间到我的购车按钮,触发就同步一下数据库最新状态确保实时性。在这里面,可以用json格式来传输数据,不需要什么jsp,至于会话控制,你使用拦截器过滤器等都很容易实现。过期就跳转登录页面。
如果并发性能要求比较高,那么给个刷新购物车按钮,要么提交的时候再刷新,来降低服务器负荷,还有就是先将数据在后台缓存,一定时间周期或填表付款的时候再更新数据库。
ajax通过post去后台改数据库,然后在success中判断返回值是否为修改成功 成功则去修改购物车数量 失败就不用我说了吧~