欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

旅游网案例:旅游线路收藏功能

程序员文章站 2022-04-03 18:31:52
...

一、需求分析

旅游网案例:旅游线路收藏功能
当页面加载完成后,发送 Ajax 请求,获取用户是否收藏的标记。然后根据标记,展示不同的按钮样式。
旅游网案例:旅游线路收藏功能
旅游网案例:旅游线路收藏功能

二、RouteServlet.java

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

三、改变收藏样式按钮

$(function () {
    //    发送请求,判断用户是否收藏过该线路
        var rid=getParameter("rid");
        $.get("route/isFavorite",{rid:rid},function (flag) {
            if (flag){
            //    用户收藏过,就设置收藏按钮的样式
                $("#favorite").addClass("already");
                $("#favorite").attr("disabled","disabled");
            }else {
            //    用户没有收藏
            }
        })
    })

四、收藏次数的动态展示

旅游网案例:旅游线路收藏功能
其实是随着页面展示的,所以应该放到 RouteServiceImpl 中调用Dao方法根据rid获得收藏次数给 route 的 Count 属性赋值

//        4.查询收藏次数
        int count = favoriteDao.findCountByRid(route.getRid());
        route.setCount(count);

五、点击按钮收藏线路

旅游网案例:旅游线路收藏功能

 public void addFavorite(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) {
//            用户尚未登录,交由html页面处理
            return;
        } else {
//            用户已经登录
            uid = user.getUid();
        }
//        3.调用 FavoriteService 添加
        favoriteService.add(rid,uid);
    }

注意添加的SQL语句:

public void add(int rid, int uid) {
        String sql = "insert into tab_favorite values(?,?,?)";
        template.update(sql,rid,new Date(),uid);
    }

六、点击后页面自动刷新同时保证收藏按钮不能再点击

$(function () {

        //    发送请求,判断用户是否收藏过该线路
        var rid = getParameter("rid");
        $.get("route/isFavorite", {rid: rid}, function (flag) {
            if (flag) {
                //    用户收藏过,就设置收藏按钮的样式
                $("#favorite").addClass("already");
                $("#favorite").attr("disabled", "disabled");
                //删除按钮的点击事件
                $("#favorite").removeAttr("onclick");
            } else {
                //    用户没有收藏
            }
        })
    });
//点击收藏按钮触发的方法
    function addFavorite() {
        var rid = getParameter("rid");
        //    1.判断用户是否登录
        $.get("user/findOne", {}, function (user) {
            if (user) {
                //    用户登录了,添加功能
                $.get("route/addFavorite", {rid: rid}, function () {
                    //    代码刷新页面
                    location.reload();
                })
            } else {
                //    用户没有登录
                alert("您尚未登录,请登录");
                location.href = "http://localhost/travel/login.html";
            }
        })
    }

旅游网案例:旅游线路收藏功能

相关标签: web java