黑马旅游网编写练习(6)--旅游线路分页展示功能

本文详细介绍了如何在黑马旅游网中实现旅游线路的分页展示功能,包括前端cid的传递、后台数据查询与响应、页面加载后的Ajax请求、商品信息和分页工具条的展示,以及页面定位到顶端的优化。
摘要由CSDN通过智能技术生成

黑马旅游网编写练习(6)–旅游线路分页展示功能

首页的目录展示功能已经完成,在进入主页后,页面会自动向服务器发送Ajax请求,从而获取目录数据,我们将其名称cname展示到页面中;接下来要实现的是分页展示功能

分析
在点击了某一个目录后,需要展示该目录下的资源到页面中。由于前端展示是html页面,所以只能使用异步请求来获取数据,首先观察目录表与分页展示表在数据库中的关系,如下图所示。
旅游路线与旅游目录表格关系图
然后分析展示过程:当用户点击某一目录后,我们需要发送一个Ajax请求给服务器,请求中需要包含该目录对应的cid;通过该目录的cid,服务器查询与之关联的另一个目录,称作tab_route表;将该表中位于此目录下的数据获取出来,并以json形式返回给客户端,客户端完成展示。由于在展示过程中还涉及到分页功能,所以数据的交互分析结果图如下所示:
分页展示功能数据交互分析

在目录中加入类别cid的传递

前面编写的目录展示只保存了cname,并未保存cid,所以修改Category的service层代码,加入cid的保存。修改后的代码如下:

     /**
     * 查询数据库中tab_category,查询成功返回list集合
     * 使用redis缓存进行优化
     * @return
     */
    @Override
    public List<Category> findTab() {
   

        // 定义一个set集合,存放redis中集合
        //Set<String> categorys = null;
        Set<Tuple> categorys = null;
        // 定义一个list集合,存放数据库中集合
        List<Category> list = null;

        // 查询缓存中是否存在category
        //categorys = jedis.zrange("category",0,-1);
        // 查询redis中的分数cid和值cname
        categorys = jedis.zrangeWithScores("category",0,-1);
        if(categorys == null || categorys.size() == 0){
   
            // redis中不存在
            System.out.println("redis中不存在Category,从数据库中查询...");
            // 调用dao层方法查询数据
            list = dao.findTab();

            // 将查询的结果存到redis中,key为category
            for (Category category : list) {
   
                jedis.zadd("category",category.getCid(),category.getCname());
            }
        }else{
   
            // redis中存在
            System.out.println("redis中存在Category,从redis中查询...");

            // 将redis中的set集合转换为list集合
            list = new ArrayList<Category>();
            for (Tuple tuple : categorys) {
   
                Category category = new Category();
                category.setCid((int) tuple.getScore());
                category.setCname(tuple.getElement());

                list.add(category);
            }
        }

        return list;
    }
修改前端cid的传递

此时服务器响应回来的数据中已经包含了cid,我们接下来需要在点击响应的目录后,将cid信息进行传递,只需要在header.html的获取分类目录请求中加入cid即可:

    // 获取分类目录请求
    $.post("category/findTab",{
   },function (data) {
   

        // data格式:[{"cid":8,"cname":"全球自由行"},{"cid":5,"cname":"国内游"},{},{},{}]
        var list = '<li class="nav-active"><a href="index.html">首页</a></li>';
        var li;
        // 遍历集合
        for (var i=0;i<data.length; i++){
   
            // 拼接目录,并加入每个目录对应的cid传递
            li = '<li><a href="route_list.html?cid='+data[i].cid+'">'+data[i].cname+'</a></li>';
            list+=li;
        }
        list+='<li><a href="favoriterank.html">收藏排行榜</a></li>';
        // 将list字符串,显示到ul标签中
        $("#category").html(list);
    });
路由线路的分页展示

当在主页点击了分类目录后,会跳转到route_list.html页面,并且传递该目录对应的cid,所以可以在route_list.html页面中加入Ajax请求,当页面加载完成后,便向服务器发送请求,将服务器响应的json数据添加到页面中。

首先完成请求route_list.html页面的cid的获取:

    // 在入口函数中加入一下代码来获取cid
     // 根据请求当前资源的路径获取cid
    // 请求路径 http://localhost/travel/route_list.html?cid=7
    var cid = location.search.split("=")[1];

至此我们完成了cid数据的获取,前面具体的展示功能暂时先不做;先完成后台的数据查询与响应,关于数据的交互在前的分析过程中已经给出了说明,所以开始从dao层,逐次向servlet层编写后台代码。
首先创建一个PageBean实体类,用来存放响应的数据。主要包含上述列出的所有变量,并添加get与set方法形成。具体代码如下:

    /**
     * 分页展示数据的实体类
     */
    public class PageBean<T>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值