天天看點

黑馬旅遊網(四)一、旅遊線路收藏二、收藏次數的動态展示三、完成點選收藏的功能

文章目錄

  • 一、旅遊線路收藏
      • 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.運作結果

黑馬旅遊網(四)一、旅遊線路收藏二、收藏次數的動态展示三、完成點選收藏的功能
黑馬旅遊網(四)一、旅遊線路收藏二、收藏次數的動态展示三、完成點選收藏的功能
黑馬旅遊網(四)一、旅遊線路收藏二、收藏次數的動态展示三、完成點選收藏的功能
感謝浏覽和收藏

繼續閱讀