天天看点

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

文章目录

  • 一、旅游线路收藏
      • 1.分析
      • 2.后台代表编写
      • 3.前台代码的编写
      • 4.执行结果
  • 二、收藏次数的动态展示
  • 三、完成点击收藏的功能
      • 1.分析
      • 2.后台代码的编写
      • 3.前台代码的编写
      • 4.运行结果

一、旅游线路收藏

1.分析

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

用户表里面有uid,线路表里面有rid,现在有一张收藏表里面有(uid,date,rid)代表那一条线路在那一天被哪一个用户收藏

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

2.后台代表编写

routeServlet中添加isFavorite方法

@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {

    private RouteService routeService = new RouteServiceImpl();
    private FavoriteService favoriteService = new FavoriteServiceImpl();

    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);
    }
    
}
           

favorite类

public class Favorite implements Serializable {
    private Route route;//旅游线路对象
    private String date;//收藏时间
    private User user;//所属用户


    public Favorite() {
    }
    
    public Favorite(Route route, String date, User user) {
            this.route = route;
            this.date = date;
            this.user = user;
    }

    public Route getRoute() {
        return route;
    }
    public void setRoute(Route route) {
        this.route = route;
    }

    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

           

FavoriteService

public interface FavoriteService {

    public boolean isFavorite(String rid, int uid);
}
           
public class FavoriteServiceImpl implements FavoriteService {

    private FavoriteDao favoriteDao = new FavoriteDaoImpl();

    @Override
    public boolean isFavorite(String rid, int uid) {

        Favorite favorite = favoriteDao.findByRidAndUid(Integer.parseInt(rid), uid);

        return favorite != null;//如果对象有值,则为true,反之,则为false
    }

}
           

FavoriteDao

public interface FavoriteDao {


    public Favorite findByRidAndUid(int rid, int uid);
    
}

           
public class FavoriteDaoImpl implements FavoriteDao {

    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @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;
    }
    
}
           
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

3.前台代码的编写

route_detail.html

$(function () {
       // 发送请求,判断用户是否收藏过该线路
        
        var rid = getParameter("rid");//获取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{
                // 用户没有收藏,什么也不做,用默认样式
            }
        });
    });
           

4.执行结果

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

二、收藏次数的动态展示

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

改写routeServiceImpl

前期学过,routeServiceImpl里面有一个findOne()方法就是查询一条线路的详情(图片信息,商家信息),而一条线路的收藏次数也属于一条线路的详细信息,所以要把它封装到findOne()方法里

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

改写favoriteDao

在favoriteDao中添加findCountByRid()方法

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
public interface FavoriteDao {
    
    /**
     * 根据rid 查询收藏次数
     * @param rid
     * @return
     */
    public int findCountByRid(int rid);
}
           
public class FavoriteDaoImpl implements FavoriteDao {

    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public int findCountByRid(int rid) {
        String sql = "SELECT COUNT(*) FROM tab_favorite WHERE rid = ?";

        return template.queryForObject(sql,Integer.class,rid);
    }
    
}
           

前端代码添加收藏次数

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

三、完成点击收藏的功能

1.分析

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

2.后台代码的编写

在routeServlet中添加addFavorite()方法

@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {

    private RouteService routeService = new RouteServiceImpl();
    private FavoriteService favoriteService = new FavoriteServiceImpl();

    public void addFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, 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中添加add()方法

public interface FavoriteService {
    
    void add(String rid, int uid);
}
           
public class FavoriteServiceImpl implements FavoriteService {

    private FavoriteDao favoriteDao = new FavoriteDaoImpl();

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

FavoriteDao中添加add()方法

public interface FavoriteDao {

    void add(int i, int uid);
}
           
public class FavoriteDaoImpl implements FavoriteDao {

    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public void add(int rid, int uid) {
        String sql = "insert into tab_favorite values(?,?,?)";

        template.update(sql,rid,new Date(),uid);
    }
}
           

3.前台代码的编写

route_detail.html

//点击收藏按钮触发的方法
    function addFavorite(){
        
        var rid = getParameter("rid");//获取rid
        
        //1. 判断用户是否登录
        $.get("user/findOne",{},function (user) {
           if(user){
               //用户登录了
               
                //发送Ajax请求,完成添加收藏的功能
                $.get("route/addFavorite",{rid:rid},function () {

                    
                    location.reload();//代码刷新页面
                });

           }else{
               //用户没有登录
               alert("您尚未登录,请登录");
               location.href="http://localhost/travel/login.html";//跳转到登录页码
           }
        })
    }
           
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能

4.运行结果

黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
黑马旅游网(四)一、旅游线路收藏二、收藏次数的动态展示三、完成点击收藏的功能
感谢浏览和收藏

继续阅读