06 旅游线路分页功能实现

**【分析】**点击不同分类后,将来看到的旅游线路不一样的。根据数据库表结构可知,旅游线路表和分类表是多对一的关系。
在这里插入图片描述

功能实现

1.实现每一个分类按钮具有cid属性并能传参

前端页面添加cid参数:
在这里插入图片描述
后端代码改动:
在这里插入图片描述

2.route.html页面取到cid参数的值

 <script>
        $(function () {
            var search = location.search;
            //alert(search);//?id=5
            // 切割字符串,拿到第二个值
            var cid = search.split("=")[1];

            //当页码加载完成后,调用load方法,发送ajax请求加载数据
            load(cid);
        });
    </script>

3.分页展示数据功能实现

3.1 分析

【实现】

  1. 服务器端代码编写
  2. 前端代码编写

【整体功能分析】
在这里插入图片描述

3.2 服务器端代码编写

(a)创建PageBean对象

package cn.itcast.travel.domain;

import java.util.List;

/**
 * 分页对象
 */
public class PageBean<T> {

    private int totalCount;//总记录数
    private int totalPage;//总页数
    private int currentPage;//当前页码
    private int pageSize;//每页显示的条数

    private List<T> list;//每页显示的数据集合

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
}

(b)RouteServlet

@WebServlet("/route/*")
public class RouteServlet extends BaseServlet{

    private RouteService routeService = new RouteServiceImpl();
    /**
     * 分页查询
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void pageQuery(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.接收参数
        String currentPageStr = request.getParameter("currentPage");
        String pageSizeStr = request.getParameter("pageSize");
        String cidStr = request.getParameter("cid");
        int cid = 0;//类别id
        //2.处理参数
        if(cidStr !=null && cidStr.length() > 0){
            cid = Integer.parseInt(cidStr);
        }
        int currentPage = 0;//当前页码,如果不传递,这默认为第一页
        if(currentPageStr !=null && currentPageStr.length() > 0){
            currentPage = Integer.parseInt(currentPageStr);
        }else{
            currentPage = 1;
        }
        int pageSize = 0;//每页显示的条数,如果不传递,默认每页显示5条
        if(pageSizeStr!=null && pageSizeStr.length() > 0){
            pageSize = Integer.parseInt(pageSizeStr);
        }else{
            pageSize = 5;
        }
        //3.调用Service查询PageBean对象
        PageBean<Route> pb = routeService.pageQuery(cid, currentPage, pageSize);

        //4.将PageBean对象序列化json返回
        writeValue(pb,response);
    }
}

(c)RouteService

public class RouteServiceImpl implements RouteService {
    private RouteDao routeDao = new RouteDaoImpl();

    @Override
    public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize) {
       //封装PageBean
        PageBean<Route> pb = new PageBean<Route>();
        //设置当前页码
        pb.setCurrentPage(currentPage);
        //设置每页显示的条数
        pb.setPageSize(pageSize);
        //设置总记录数
        int totalCount = routeDao.findTotalCount(cid);
        pb.setTotalCount(totalCount);

        //设置当前页显示的数据集合
        int start = (currentPage-1)*pageSize;//开始的记录数
        List<Route> list = routeDao.findByPage(cid,start,pageSize);
        pb.setList(list);

        //设置总页数 = 总页数/每页显示条数
        //
        int totalPage = totalCount%pageSize == 0? totalCount/pageSize:(totalCount/pageSize+1);
        pb.setTotalCount(totalCount);
        return pb;
    }
}

(d)RouteDao

public class RouteDaoImpl implements RouteDao {
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public int findTotalCount(int cid) {
        String sql = "select count(*) from tab_route where cid =?";

        return template.queryForObject(sql,Integer.class,cid);
    }

    @Override
    public List<Route> findByPage(int cid, int start, int pageSize) {
        String sql = "select * from tab_route where cid = ? limit ?,?";

        return template.query(sql,new BeanPropertyRowMapper<Route>(Route.class),cid,start,pageSize);
    }
}

至此,通过浏览器直接访问可解析出对应页的json内容:
在这里插入图片描述

3.3 前端代码实现

(1)测试页数和总条数显示功能
前端代码:
在这里插入图片描述
正确显示效果图:
在这里插入图片描述
(2)遍历显示每一页按钮以及“上下页”、“首页末页”

$(function () {
            var search = location.search;
            //alert(search);//?id=5
            // 切割字符串,拿到第二个值
            var cid = search.split("=")[1];

            // //当页码加载完成后,调用load方法,发送ajax请求加载数据
            // load(cid);

            //发送ajax请求,请求route/pageQuery,传递cid
            $.get("route/pageQuery",{cid:cid},function(pb){
                //解析pagebean数据,展示到页面上
                //1.分页工具条的数据展示
                //1.1 展示总页码和中记录数
                $("#totalPage").html(pb.totalPage);
                $("#totalCount").html(pb.totalCount);
            /*
                <li><a href="">首页</a></li>
                <li class="threeword"><a href="#">上一页</a></li>
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
                <li><a href="#">4</a></li>
                <li><a href="#">5</a></li>
                <li><a href="#">6</a></li>
                <li><a href="#">7</a></li>
                <li><a href="#">8</a></li>
                <li><a href="#">9</a></li>
                <li><a href="#">10</a></li>
                <li class="threeword"><a href="javascript:;">下一页</a></li>
                <li class="threeword"><a href="javascript:;">末页</a></li>
            */
                var lis = "";

                var firstPage = '<li><a href="">首页</a></li>';
                var beforePage = '<li class="threeword"><a href="#">上一页</a></li>';

                lis += firstPage;
                lis += beforePage;
                //1.2 展示分页页码
                for(var i = 1;i <= pb.totalPage; i++){
                    //创建页码的li
                    var li = '<li><a href="#">'+i+'</a></li>';
                    //拼接字符串
                    lis += li;
                }
                var nextPage = '<li class="threeword"><a href="javascript:;">下一页</a></li>';
                var lastPage = '<li class="threeword"><a href="javascript:;">末页</a></li>';
                lis += nextPage;
                lis += lastPage;
                $("#pageNum").html(lis);

(3)页码异步刷新数据功能实现

 <script>

        $(function () {
            var search = location.search;
            //alert(search);//?id=5
            // 切割字符串,拿到第二个值
            var cid = search.split("=")[1];

            // //当页码加载完成后,调用load方法,发送ajax请求加载数据
            // load(cid);

            //当页码加载完成后,调用load方法,发送ajax请求数据
            load(cid);
        });

        function load(cid,currentPage){
            //发送ajax请求,请求route/pageQuery,传递cid
            $.get("route/pageQuery",{cid:cid,currentPage:currentPage},function(pb){
                //解析pagebean数据,展示到页面上
                //1.分页工具条的数据展示
                //1.1 展示总页码和中记录数
                $("#totalPage").html(pb.totalPage);
                $("#totalCount").html(pb.totalCount);

                /*
                    <li><a href="">首页</a></li>
                    <li class="threeword"><a href="#">上一页</a></li>
                    <li><a href="#">1</a></li>
                    <li><a href="#">2</a></li>
                    <li><a href="#">3</a></li>
                    <li><a href="#">4</a></li>
                    <li><a href="#">5</a></li>
                    <li><a href="#">6</a></li>
                    <li><a href="#">7</a></li>
                    <li><a href="#">8</a></li>
                    <li><a href="#">9</a></li>
                    <li><a href="#">10</a></li>
                    <li class="threeword"><a href="javascript:;">下一页</a></li>
                    <li class="threeword"><a href="javascript:;">末页</a></li>
                */
                var lis = "";


                var firstPage = '<li><a href="javascript:load('+cid+')">首页</a></li>';
                //计算上一页的页码
                var beforeNum = currentPage - 1;
                if(beforeNum<=0){
                    beforeNum = 0;
                }
                var beforePage = '<li οnclick="javascript:load('+cid+','+beforeNum+')" class="threeword"><a href="#">上一页</a></li>';

                lis += firstPage;
                lis += beforePage;
                //1.2 展示分页页码
                for(var i = 1;i <= pb.totalPage; i++){
                    var li = null;
                    //判断当前页是否等于i
                    if(pb.currentPage == i){
                        li = '<li class= "curPage" οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }else{
                        //创建页码的li
                        li = '<li οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }

                    //拼接字符串
                    lis += li;
                }



                var nextPage = '<li class="threeword"><a href="javascript:;">下一页</a></li>';
                var lastPage = '<li class="threeword"><a href="javascript:;">末页</a></li>';
                lis += nextPage;
                lis += lastPage;
                $("#pageNum").html(lis);


                /*
                <li>
                    <div class="img"><img src="images/04-search_03.jpg" alt=""></div>
                        <div class="text1">
                        <p>【减100元 含除夕/春节出发】广州增城三英温泉度假酒店/自由行套票</p>
                    <br/>
                    <p>1-2月出发,网付立享¥1099/2人起!爆款位置有限,抢完即止!</p>
                    </div>
                    <div class="price">
                        <p class="price_num">
                        <span>&yen;</span>
                    <span>299</span>
                    <span>起</span>
                    </p>
                    <p><a href="route_detail.html">查看详情</a></p>
                    </div>
                    </li>
                 */

                //2.列表数据展示
                var route_lis = "";

                for (var i = 0; i < pb.list.length; i++) {
                    //获取{rid:1,rname:"xxx"}
                    var route = pb.list[i];

                    var li = '<li>\n' +
                        '                        <div class="img"><img src="'+route.rimage+'" style="width: 299px;"></div>\n' +
                        '                        <div class="text1">\n' +
                        '                            <p>'+route.rname+'</p>\n' +
                        '                            <br/>\n' +
                        '                            <p>'+route.routeIntroduce+'</p>\n' +
                        '                        </div>\n' +
                        '                        <div class="price">\n' +
                        '                            <p class="price_num">\n' +
                        '                                <span>&yen;</span>\n' +
                        '                                <span>'+route.price+'</span>\n' +
                        '                                <span>起</span>\n' +
                        '                            </p>\n' +
                        '                            <p><a href="route_detail.html">查看详情</a></p>\n' +
                        '                        </div>\n' +
                        '                    </li>';
                    route_lis += li;
                }
                $("#route").html(route_lis);
            });
        }


    </script>

(4)页码显示固定数量的优化实现
在这里插入图片描述
前端完整代码实现:

<script>

        $(function () {
            var search = location.search;
            //alert(search);//?id=5
            // 切割字符串,拿到第二个值
            var cid = search.split("=")[1];

            // //当页码加载完成后,调用load方法,发送ajax请求加载数据
            // load(cid);

            //当页码加载完成后,调用load方法,发送ajax请求数据
            load(cid);
        });

        function load(cid,currentPage){
            //发送ajax请求,请求route/pageQuery,传递cid
            $.get("route/pageQuery",{cid:cid,currentPage:currentPage},function(pb){
                //解析pagebean数据,展示到页面上
                //1.分页工具条的数据展示
                //1.1 展示总页码和中记录数
                $("#totalPage").html(pb.totalPage);
                $("#totalCount").html(pb.totalCount);

                /*
                    <li><a href="">首页</a></li>
                    <li class="threeword"><a href="#">上一页</a></li>
                    <li><a href="#">1</a></li>
                    <li><a href="#">2</a></li>
                    <li><a href="#">3</a></li>
                    <li><a href="#">4</a></li>
                    <li><a href="#">5</a></li>
                    <li><a href="#">6</a></li>
                    <li><a href="#">7</a></li>
                    <li><a href="#">8</a></li>
                    <li><a href="#">9</a></li>
                    <li><a href="#">10</a></li>
                    <li class="threeword"><a href="javascript:;">下一页</a></li>
                    <li class="threeword"><a href="javascript:;">末页</a></li>
                */
                var lis = "";
                var fristPage = '<li οnclick="javascipt:load('+cid+')"><a href="javascript:void(0)">首页</a></li>';

                //计算上一页的页码
                var beforeNum =  pb.currentPage - 1;
                if(beforeNum <= 0){
                    beforeNum = 1;
                }

                var beforePage = '<li  οnclick="javascipt:load('+cid+','+beforeNum+')" class="threeword"><a href="javascript:void(0)">上一页</a></li>';

                lis += fristPage;
                lis += beforePage;
                //1.2 展示分页页码
                /*
                    1.一共展示10个页码,能够达到前5后4的效果
                    2.如果前边不够5个,后边补齐10个
                    3.如果后边不足4个,前边补齐10个
                */

                // 定义开始位置begin,结束位置 end
                var begin; // 开始位置
                var end ; //  结束位置

                //1.要显示10个页码
                if(pb.totalPage < 10){
                    //总页码不够10页
                    begin = 1;
                    end = pb.totalPage;
                }else{
                    //总页码超过10页
                    begin = pb.currentPage - 5 ;
                    end = pb.currentPage + 4 ;

                    //2.如果前边不够5个,后边补齐10个
                    if(begin < 1){
                        begin = 1;
                        end = begin + 9;
                    }

                    //3.如果后边不足4个,前边补齐10个
                    if(end > pb.totalPage){
                        end = pb.totalPage;
                        begin = end - 9 ;
                    }
                }

                for (var i = begin; i <= end ; i++) {
                    var li;
                    //判断当前页码是否等于i
                    if(pb.currentPage == i){
                        li = '<li class="curPage" οnclick="javascipt:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }else{
                        //创建页码的li
                        li = '<li οnclick="javascipt:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }
                    //拼接字符串
                    lis += li;
                }

               /*
                for(var i = 1;i <= pb.totalPage; i++){
                    var li = null;
                    //判断当前页是否等于i
                    if(pb.currentPage == i){
                        li = '<li class= "curPage" οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }else{
                        //创建页码的li
                        li = '<li οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }
                    //拼接字符串
                    lis += li;
                }
                */

                var nextPage = '<li class="threeword"><a href="javascript:;">下一页</a></li>';
                var lastPage = '<li class="threeword"><a href="javascript:;">末页</a></li>';
                lis += nextPage;
                lis += lastPage;
                $("#pageNum").html(lis);

                /*
                <li>
                    <div class="img"><img src="images/04-search_03.jpg" alt=""></div>
                        <div class="text1">
                        <p>【减100元 含除夕/春节出发】广州增城三英温泉度假酒店/自由行套票</p>
                    <br/>
                    <p>1-2月出发,网付立享¥1099/2人起!爆款位置有限,抢完即止!</p>
                    </div>
                    <div class="price">
                        <p class="price_num">
                        <span>&yen;</span>
                    <span>299</span>
                    <span>起</span>
                    </p>
                    <p><a href="route_detail.html">查看详情</a></p>
                    </div>
                    </li>
                 */

                //2.列表数据展示
                var route_lis = "";
                for (var i = 0; i < pb.list.length; i++) {
                    //获取{rid:1,rname:"xxx"}
                    var route = pb.list[i];

                    var li = '<li>\n' +
                        '                        <div class="img"><img src="'+route.rimage+'" style="width: 299px;"></div>\n' +
                        '                        <div class="text1">\n' +
                        '                            <p>'+route.rname+'</p>\n' +
                        '                            <br/>\n' +
                        '                            <p>'+route.routeIntroduce+'</p>\n' +
                        '                        </div>\n' +
                        '                        <div class="price">\n' +
                        '                            <p class="price_num">\n' +
                        '                                <span>&yen;</span>\n' +
                        '                                <span>'+route.price+'</span>\n' +
                        '                                <span>起</span>\n' +
                        '                            </p>\n' +
                        '                            <p><a href="route_detail.html">查看详情</a></p>\n' +
                        '                        </div>\n' +
                        '                    </li>';
                    route_lis += li;
                }
                $("#route").html(route_lis);
                //定位至页面最顶端
                window.scrollTo(0,0);
            });
        }
    </script>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
项目涉及技术:    1、前端:jsp、css、javascript、jQuery(js框架)、jQueryEasyUi(基于jQuery的前端框架)+BootStrap(前端框架)、dTree插件、富文本编辑器等 2、后台:SpringMvc、Spring、Hibernate(持久层框架)、JPA、MD5加密、Spring Boot、 log4J日志框架、jstl、jstl自定义分页标签等3、项目管理工具:Maven4、数据库:Mysql5、服务器:Tomcat项目开发涉及功能: 1、项目以及数据库搭建2、用户异步登录、退出以及记住用户信息3、自定义分页标签实现(24种样式随意切换)4、拦截器功能实现5、整合前端框架 EasyUi以及Bootstrap6、用户模块信息添加、修改、删除、多条件分页查询、激活、预览、用户账号异步校验、异步加载部门以及职位信息7、角色模块添加、删除、修改、分页查询、角色绑定以及解绑用户、角色绑定以及解绑操作8、Spring事务处理机制讲解9、模块管理增加、修改、删除、分页查询、整合dTree树形插件10、项目实现权限控制11、公告模块整合富文本编辑器12、密码进行MD5加密13、项目改版成Spring Boot实现14、代码机器人使用等等功能其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wimb

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

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

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

打赏作者

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

抵扣说明:

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

余额充值