旅游网(8)-------------- 用户是否收藏

旅游线路功能

用户是否收藏

image-20210908120904809

判断当前登录用户是否收藏过该线路

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

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

image-20210908131030795

编写代码

后台代码
Service
FavoriteDao
public interface FavoriteDao {
    /**
     * 根据rid和uid查询收藏信息
     * @param rid
     * @param uid
     * @return
     */
    public Favorite findByRidAndUid(int rid,int uid);
}
public class FavoriteDaoImpl implements FavoriteDao {
    //使用template去执行sql
    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();
        }
        //如果像之前那样直接返回的话,如果为null会报错,所以在这里这样使用,过后通过判断是否为null
        return favorite;
    }
}
FavoriteService
public interface FavoriteService {

    /**
     * 判断是否收藏
     * @param rid
     * @param uid
     * @return
     */
    //因为从rid是从页面上获取的,所以都是字符串类型的,所以是字符串
    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
    }
}
Servlet
  • routeServlet
public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //获取线路id
    String rid = request.getParameter("rid");
    //获取当前用户登录的用户 user
    User user = (User) request.getSession().getAttribute("user");
    int uid;//用户id
    if (user == null){
        //用户尚未登录,因为0号id也并不存在,所以也查询不到记录
        uid = 0;
    }else {
        //用户已经登录
        uid = user.getUid();
    }
    //3.调用FavoriteService查询是否收藏
    boolean flag = favoriteService.isFavorite(rid, uid);
    //4.写回客户端
    writeValue(flag,response);
}
前台代码
  • route_detail.html
实现收藏过后样式的改变
$(function (){
    /*
<a class="btn" id="favorite"><i class="glyphicon glyphicon-heart-empty"></i>点击收藏</a>
<a  class="btn already" disabled="disabled"><i class="glyphicon glyphicon-heart-empty"></i>点击收藏</a>
     */
    //发送请求,判断用户是否收藏
    var rid = getParameter("rid");
    $.get("route/isFavorite",{rid:rid},function (flag){
        if (flag){
            //用户已经收藏过
            //设置收藏按钮的样式
            $("#favorite").addClass("already");
            $("#favorite").prop("disabled",disabled);
        }else {
            //用户没有收藏
        }
    });
});
显示收藏次数
FavoriteDao
public interface FavoriteDao {
    /**
     * 根据rid和uid查询收藏信息
     * @param rid
     * @param uid
     * @return
     */
    public Favorite findByRidAndUid(int rid,int uid);

    /**
     * 根据rid查询收藏次数
     * @param rid
     * @return
     */
    int findCountByRid(int rid);
}
@Override
public int findCountByRid(int rid) {
    String sql = "select count(*) from tab_favorite where rid = ?";
    return template.queryForObject(sql,Integer.class,rid);
}
Service
//设置总页数 = 总记录数/每页显示条数
int totalPage = totalCount % pageSize == 0 ? totalCount/pageSize : (totalCount/pageSize)+1;
pb.setTotalPage(totalPage);
route_detail.html
$("#favoriteCount").html("已收藏"+route.count+"次");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值