旅游线路收藏
分析
判断当前登录用户是否收藏过该线路
当页面加载完成后,发送ajax请求,获取用户是否收藏标记
根据标记,展示不同的按钮样式
后台代码
RouteServlet类
/** * 判断当前登录用户是否收藏过该线路 * @param request * @param response * @throws ServletException * @throws IOException */ public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws IOException { //1.获取线路id String rid = request.getParameter("rid"); //2.获取当前登录的用户 user User user = (User) request.getSession().getAttribute("user"); int uid; if (user == null){ //用户尚未登录 uid = 0; }else{ //用户已经登录 uid = user.getUid(); } //3.调用FavoritService查询是否收藏 boolean favorite = favoriteService.isFavorite(rid, uid); //4.写回客户端 writeValue(favorite, response); }
FavoriteService接口
/** * 判断是否收藏 * @param rid * @param uid * @return */ public boolean isFavorite(String rid,int uid);
FavoriteServiceImpl实体类
package cn.itcast.travel.service.impl; import cn.itcast.travel.dao.FavoriteDao; import cn.itcast.travel.dao.impl.FavoriteDaoImpl; import cn.itcast.travel.domain.Favorite; import cn.itcast.travel.service.FavoriteService; public class FavoriteServiceImpl implements FavoriteService { private FavoriteDao favoriteDao = new FavoriteDaoImpl(); @Override public boolean isFavorite(String rid, int uid) { Favorite favorite = favoriteDao.favoriteDao(Integer.parseInt(rid), uid); return favorite != null;// 如果对象有值 则为true,反之,则为false } }
FavoriteDao接口
/** * 根据rid和uid查询收藏信息 * @param rid * @param uid * @return */ public Favorite favoriteDao(int rid, int uid);
FavoriteDaoImpl实体类
package cn.itcast.travel.dao.impl; import cn.itcast.travel.dao.FavoriteDao; import cn.itcast.travel.domain.Favorite; import cn.itcast.travel.util.JDBCUtils; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; public class FavoriteDaoImpl implements FavoriteDao { private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); @Override public Favorite favoriteDao(int rid, int uid) { //抛异常防止bugg 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; } }
前台代码
route_detail.html页面
$(function () { //发送请求,判断用户是否收藏过该线路 let 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 { //用户没有收藏 } }); });
收藏次数动态展示
FavoriteDao接口
/** * 根据线路rid 查询收藏次数 * @param rid * @return */ public int findCountByRid(int rid);
FavoriteDaoImpl实体类
@Override public int findCountByRid(int rid) { String sql = "select count(*) from tab_favorite where rid = ?"; return template.queryForObject(sql, Integer.class,rid); }
RouteServiceImpl实体类
package cn.itcast.travel.service.impl; import cn.itcast.travel.dao.FavoriteDao; import cn.itcast.travel.dao.RouteDao; import cn.itcast.travel.dao.RouteImgDao; import cn.itcast.travel.dao.SellerDao; import cn.itcast.travel.dao.impl.FavoriteDaoImpl; import cn.itcast.travel.dao.impl.RouteDaoImpl; import cn.itcast.travel.dao.impl.RouteImgDaoImpl; import cn.itcast.travel.dao.impl.SellerDaoImpl; import cn.itcast.travel.domain.PageBean; import cn.itcast.travel.domain.Route; import cn.itcast.travel.domain.RouteImg; import cn.itcast.travel.domain.Seller; import cn.itcast.travel.service.RouteService; import javax.servlet.annotation.WebServlet; import java.util.List; public class RouteServiceImpl implements RouteService { private RouteDao routeDao = new RouteDaoImpl(); private RouteImgDao routeImgDao = new RouteImgDaoImpl(); private SellerDao sellerDao = new SellerDaoImpl(); private FavoriteDao favoriteDao = new FavoriteDaoImpl(); @Override public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize,String rname) { //封装PageBean PageBean<Route> pb = new PageBean<>(); //设置当前页码 pb.setCurrentPage(currentPage); //设置每页显示条数 pb.setPageSize(pageSize); //设置总记录数 int totalCount = routeDao.findTotalCount(cid,rname); pb.setTotalCount(totalCount); //设置当前页显示的数据集合 int start = (currentPage-1)*pageSize; List<Route> list = routeDao.findByPage(cid, start, pageSize,rname); pb.setList(list); //设置总页数 = 总记录数/每页显示条数 int totalPage = totalCount % pageSize ==0 ? totalCount / pageSize : (totalCount / pageSize)+1; pb.setTotalPage(totalPage); System.out.println(totalPage); return pb; } @Override public Route findOne(String rid) { //1.根据id查询route对象 routeDao Route route = routeDao.findOne(Integer.parseInt(rid)); //2.根据route的id 查询图片集合信息 List<RouteImg> routeImgList = routeImgDao.findByRid(route.getRid()); //2.2将集合设置到route对象 route.setRouteImgList(routeImgList); //3.根据sid卖家id查询tab_seller查询卖家信息,将其设置到route对象 Seller seller = sellerDao.findById(route.getSid()); route.setSeller(seller); //4.查询收藏次数 int count = favoriteDao.findCountByRid(route.getRid()); route.setCount(count); return route; } }
route_detail.html页面
//2、发送请求,请求route/findOne
$.get("route/findOne",{rid:rid},function (route) {
//3、解析数据,填充html
$("#rname").html(route.rname);
$("#routeIntroduce").html(route.routeIntroduce);
$("#price").html("¥"+route.price);
$("#sname").html(route.seller.sname);
$("#consphone").html(route.seller.consphone);
$("#address").html(route.seller.address);
//设置收藏次数
$("#favoriteCount").html("已收藏"+route.count+"次");
FavoriteServiceImpl
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix