《黑马旅游网》综合案例day04

《黑马旅游网》综合案例day04

  1. 旅游线路收藏功能

    14.1分析
    在这里插入图片描述
    在这里插入图片描述
    14.1.1 判断当前登录用户是否收藏过该线路

    当页面加载完成后,发送ajax请求,获取用户是否收藏的标记

    根据标记,展示不同的按钮样式

    14.2编写代码

    14.2.1 后台代码

    RouteServlet

    public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
          
        //1. 获取线路id
        String rid = request.getParameter("rid");
    
        //2. 获取当前登录的用户 user
        User user = (User) request.getSession().getAttribute("user");
        int uid;//用户id
        if(user == null){
          
          
            //用户尚未登录
            uid = 0;
        }else{
          
          
            //用户已经登录
            uid = user.getUid();
        }
    
        //3. 调用FavoriteService查询是否收藏
        boolean flag = favoriteService.isFavorite(rid, uid);
    
        //4. 写回客户端
        writeValue(flag,response);
    }
    

    FavoriteService

    @Override
    public boolean isFavorite(String rid, int uid) {
          
          
    
        Favorite favorite = favoriteDao.findByRidAndUid(Integer.parseInt(rid), uid);
    
        return favorite != null;//如果对象有值,则为true,反之,则为false
    }
    

    FavoriteDao

    @Override
    public Favorite findByRidAndUid(int rid, int uid) {
          
          
        Favorite favorite = null;
        try {
          
          
            String sql = " select * from tab_favorite where rid = ? and uid = ?";
            favorite = template.queryForObject(sql, new BeanPropertyRowMapper<Favorite>(Favorite.class), rid, uid);
        } catch (DataAccessException e) {
          
          
            e.printStackTrace();
        }
        return favorite;
    }
    

    14.2.2 前台代码

    route_detail.html

    $(function () {
          
          
        //发送请求,判断用户是否收藏过该线路
        var rid = getParameter("rid");
        $.get("route/isFavorite",{
          
          rid:rid},function (flag) {
          
          
            if(flag){
          
          
                //用户已经收藏过
                //<a  class="btn already" disabled="disabled">
                //设置收藏按钮的样式
                $("#favorite").addClass("already");
                $("#favorite").prop("disabled",disabled);
    
            }else{
          
          
                //用户没有收藏
            }
        });
    });
    

    14.3收藏次数的动态展示

    前台:

    //设置收藏次数
    $("#favoriteCount").html("已收藏"+route.count+"次");
    

    后台:

    RouteService

    @Override
    public Route findOne(String rid) {
          
          
        //1.根据id去route表中查询route对象
        Route route = routeDao.findOne(Integer.parseInt(rid));
        //2.根据route的id查询图片集合信息
        List<RouteImg> routeImgList = routeImgDao.findByRid(route.getRid());
        //2.2将集合设置到route对象
        route.setRouteImgList(routeImgList);
        //3.根据route的sid(商家id)查询商家对象
        Seller seller = sellerDao.findById(route.getSid());
        route.setSeller(seller);
    
        //4.查询收藏次数
        int count = favoriteDao.findCountByRid(route.getRid());
        route.setCount(count);
        return route;
    }
    

    FavoriteDao

    @Override
    public int findCountByRid(int rid) {
          
          
        String sql = "SELECT COUNT(*) FROM tab_favorite WHERE rid = ?";
    
        return template.queryForObject(sql,Integer.class,rid);
    }
    

    14.4点击按钮收藏线路

    14.4.1 分析:
    在这里插入图片描述

    14.4.2 编码

    前台代码

    $(function () {
          
          
       // 发送请求,判断用户是否收藏过该线路
        var rid = getParameter("rid");
        $.get("route/isFavorite",{
          
          rid:rid},function (flag) {
          
          
            if(flag){
          
          
                // 用户已经收藏过
                //<a  class="btn already" disabled="disabled">
                //设置收藏按钮的样式
                $("#favorite").addClass("already");
                $("#favorite").attr("disabled","disabled");
    
                //删除按钮的点击事件
                $("#favorite").removeAttr("onclick");
            }else{
          
          
                // 用户没有收藏
            }
        });
    });
    
    //点击收藏按钮触发的方法
    function addFavorite(){
          
          
        var rid = getParameter("rid");
        //1. 判断用户是否登录
        $.get("user/findOne",{
          
          },function (user) {
          
          
           if(user){
          
          
               //用户登录了
                //添加功能
                $.get("route/addFavorite",{
          
          rid:rid},function () {
          
          
    
                    //代码刷新页面
                    location.reload();
                });
    
           }else{
          
          
               //用户没有登录
               alert("您尚未登录,请登录");
               location.href="http://localhost/travel/login.html";
           }
        })
    }
    

    后台代码

    RouteServlet

    /**
     * 添加收藏
     * @param request
     * @param response
     * @throws IOException
     */
    public void addFavorite(HttpServletRequest request, HttpServletResponse response) throws IOException {
          
          
        //1.获取线路rid
        String rid = request.getParameter("rid");
        //2.获取当前登录用户
        User user = (User) request.getSession().getAttribute("user");
        int uid;//用户id
        if(user == null){
          
          
            //用户尚未登录
            return ;
        }else{
          
          
            //用户已经登录
            uid = user.getUid();
        }
    
        //3.调用service添加
        favoriteService.add(rid, uid);
    }
    

    FavoriteService

    @Override
    public void add(String rid, int uid) {
          
          
        favoriteDao.add(Integer.parseInt(rid),uid);
    }
    

    FavoriteDao

    @Override
    public void add(int rid, int uid) {
          
          
        String sql = "insert into tab_favorite values(?,?,?)";
    
        template.update(sql,rid,new Date(),uid);
    }
    

整个项目代码下载

猜你喜欢

转载自blog.csdn.net/weixin_44505194/article/details/105684706