文章目錄
- 一、旅遊線路收藏
-
-
- 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.運作結果
感謝浏覽和收藏