收藏排行榜分页查询功能

  • A+

收藏排行榜分页查询功能

需求分析

当用户需要查询当前网站那些旅游线路被收藏更多次或者更热门时,我们可以通过点击“收藏排行榜”导航栏超链接完成根据旅游线路表中收藏次数倒序查询数据,并将查询结果展示在favoriterank.jsp收藏排行榜页面

步骤分析

前端
       点击header.jsp页面收藏排行榜超链接,因为是查询收藏的旅游线路并基于收藏次数倒序排序,所以请求到旅游线路模块RouteServlet。请求地址可以是:route?method=findRouteListRank&pageNumber=1
    
后端
       web
            1定义分页查询收藏排行榜方法
                findRouteListRank(){
                    1接收分页请求参数
                    2指定每页查询记录数
                    3调用service查询分页列表数据
                    4将查询结果PageBean放入request域对象中
                    5请求转发到favoriterank.jsp页面
                }
        
        service
            定义分页查询收藏排行榜方法
            findRouteListRank(){
                1查询满足条件的总记录数
                2构建PageBean对象
                3调用dao层,查询当前页列表数据,并赋予PageBean属性
                4设置分页工具条起始值和结束值
                5将封装结果PageBean返回
            }

        dao
            1查询满足添加的总记录数
            2查询当前页列表数据

相应实现代码

1、前端header.jsp页面

$(function () {
        var url="category";
        var params={"method":"findAllCategory"};
        $.post(url,params,function (data) {
            var categoryHtml="<li class=\"nav-active\"><a href=\"index.html\">首页</a></li>";
            $.each(data,function (index,ele) {
                categoryHtml+="<li><a href=\"route?method=findRouteListByCid&cid="+ele.cid+"&pageNumber=1\">"+ele.cname+"</a></li>";
            });
            //收藏排行榜超链接请求后端RouteServlet查询分页列表数据
            categoryHtml+="<li><a href=\"route?method=findRouteListRank&pageNumber=1\">收藏排行榜</a></li>";
            $("#categoryUI").html(categoryHtml);
        },"json");
    });

2、后端代码

web RouteServlet.java

/**
     * 分页查看收藏排行榜
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void findRouteListRank(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        1接收分页请求参数 当前页
        int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
//        2指定每页查询记录数
        int pageSize = 8;
//        3调用service查询分页列表数据
        RouteService routeService = new RouteService();
        PageBean<Route> pb = routeService.findRouteListRank(pageNumber,pageSize);
//        4将查询结果PageBean放入request域对象中
        request.setAttribute("pb",pb);
//        5请求转发到favoriterank.jsp页面
        request.getRequestDispatcher("/favoriterank.jsp").forward(request,response);
    }

service

 /**
     * 分页查看收藏排行榜
     */
    public PageBean<Route> findRouteListRank(int pageNumber, int pageSize) {
//        1查询满足条件的总记录数
        RouteDao dao = new RouteDao();
        int totalCount = dao.findRouteCountRank();
//        2构建PageBean对象
        PageBean<Route> pb = new PageBean<>(pageNumber,pageSize,totalCount);
//        3调用dao层,查询当前页列表数据,并赋予PageBean属性
        int startIndex = pb.getStartIndex();
        List<Route> list = dao.findRouteListRank(startIndex,pageSize);
        pb.setData(list);
//        4设置分页工具条起始值和结束值
        int[] ints = PageUtils.pagination(pageNumber, pb.getTotalPage());
        pb.setStart(ints[0]);
        pb.setEnd(ints[1]);
//        5将封装结果PageBean返回
        return pb;
    }

dao

 /**
     * 查询满足条件总记录数
     * @return
     */
    public int findRouteCountRank() {
        //基于jdbcTemplate查询数据
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql="select count(*) from tab_route";
        return template.queryForObject(sql,int.class);
    }

    /**
     * 基于收藏次数倒序分页查询旅游线路列表数据
     * @param startIndex
     * @param pageSize
     * @return
     */
    public List<Route> findRouteListRank(int startIndex, int pageSize) {
        //基于jdbcTemplate查询数据
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //基于收藏次数倒序分页查询旅游线路列表数据
        String sql="select * from tab_route order by count desc limit ?,?";
        return template.query(sql,new BeanPropertyRowMapper<>(Route.class),startIndex,pageSize);
    }

3、前端favoriterank.jsp展示数据代码

<%--展示列表数据div--%>
<div class="list clearfix">
                <ul>
                    <%--循环遍历展示列表数据--%>
                    <%--varStatus属性解释:
                        varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性。就拿varStatus=“status”来说,
                        事实上定义了一个status名的对象作为varStatus的绑定值。
                        该绑定值也就是status封装了当前遍历的状态,比如,可以从该对象上查看是遍历到了第几个元素:${status.count}
                        常用数据如下:
                        ${status.index} 输出行号,从0开始
                        ${status.count}  输出行号,从1开始
                    --%>
                    <c:forEach items="${pb.data}" var="route" varStatus="status">
                        <li>
                            <span class="num one">${pb.startIndex+status.count}</span>
                            <a href="route_detail.html"><img src="${route.rimage}" alt=""></a>
                            <h4><a href="route_detail.html">${route.rname}</a></h4>
                            <p>
                                <b class="price">&yen;<span>${route.price}</span>起</b>
                                <span class="shouchang">已收藏${route.count}次</span>
                            </p>
                        </li>
                    </c:forEach>
                </ul>
            </div>
                      
             <%--分页工具条div--%>
            <div class="pageNum">
                <ul>
                    <li><a href="route?method=findRouteListRank&pageNumber=1">首页</a></li>
                    <%--判断当前页是否是第一页,如果是第一页,上一页按钮禁用--%>
                    <c:if test="${pb.pageNumber>1}">
                        <li class="threeword"><a href="route?method=findRouteListRank&pageNumber=${pb.pageNumber-1}">上一页</a></li>
                    </c:if>
                    <c:if test="${pb.pageNumber<=1}">
                        <li class="threeword"><a href="javaScript:void(0)">上一页</a></li>
                    </c:if>

                    <c:forEach begin="${pb.start}" end="${pb.end}" step="1" var="num">
                    <%--当前页页码背景高亮展示--%>
                        <c:if test="${pb.pageNumber==num}">
                            <li style="background-color: yellow"><a href="route?method=findRouteListRank&pageNumber=${num}">${num}</a></li>
                        </c:if>
                        <c:if test="${pb.pageNumber!=num}">
                            <li><a href="route?method=findRouteListRank&pageNumber=${num}">${num}</a></li>
                        </c:if>
                    </c:forEach>

                    <%--判断当前页是否是最后一页,如果是最后一页,下一页按钮禁用--%>
                    <c:if test="${pb.pageNumber<pb.totalPage}">
                        <li class="threeword"><a href="route?method=findRouteListRank&pageNumber=${pb.pageNumber+1}">下一页</a></li>
                    </c:if>
                    <c:if test="${pb.pageNumber>=pb.totalPage}">
                        <li class="threeword"><a href="javaScript:void(0)">下一页</a></li>
                    </c:if>

                    <li class="threeword"><a href="route?method=findRouteListRank&pageNumber=${pb.totalPage}">末页</a></li>
                </ul>
            </div>
  • 资源分享QQ群
  • weinxin
  • 官方微信公众号
  • weinxin
沙海
一个Java基础入门的教程视频
动力节点最牛Java自学基础教程
C语言郝斌老师教程
TripodCloud:性价比最高的CN2 GIA服务器

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: