IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 旅游网站的案例 -> 正文阅读

[开发工具]旅游网站的案例


一、前台

在这里插入图片描述

1.清理缓存

如果遇到改了前端代码,页面展示没有变,一直改都不会发生变化,这是可以清理一下网页的缓存(快捷键:ctrl+shift+delete键)!!!!

2.分页功能

在做我的订单的功能的时候,分页功能没实现,一直以为是后端将数据全部发给前端,前端进行分页,其实是后端就进行分页,再将分页的数据传给前端页面进行展示。这一点一定要注意!!!!

(1)前台代码

<script>
        $(function () {
           /* var search = location.search;
            //alert(search);//?id=5
            // 切割字符串,拿到第二个值
            var cid = search.split("=")[1];*/
           //获取cid的参数值
           var cid = getParameter("cid");
            //获取rname的参数值
            var rname = getParameter("rname");
            //判断rname如果不为null或者""
            if(rname){
                //url解码
                rname = window.decodeURIComponent(rname);
            }
            //当页码加载完成后,调用load方法,发送ajax请求加载数据
            load(cid,null,rname);
        });
        function load(cid,currentPage,rname){
            //发送ajax请求,请求route/pageQuery,传递cid
            $.get("route/pageQuery",{cid:cid,currentPage:currentPage,rname:rname},function (pb) {
                //解析pagebean数据,展示到页面上
                // alert(currentPage);
                // alert(pb.currentPage);
                //1.分页工具条数据展示
                //1.1 展示总页码和总记录数
                $("#totalPage").html(pb.totalPage);
                //alert(pb.totalPage);
                $("#totalCount").html(pb.totalCount);
                var lis = "";
                var fristPage = '<li οnclick="javascipt:load('+cid+',1,\''+rname+'\')"><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+',\''+rname+'\')" 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+',\''+rname+'\')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }else{
                        //创建页码的li
                        li = '<li οnclick="javascipt:load('+cid+','+i+',\''+rname+'\')"><a href="javascript:void(0)">'+i+'</a></li>';
                    }
                    //拼接字符串
                    lis += li;
                }
                var lastPage = '<li class="threeword" οnclick="javascipt:load('+cid+','+pb.totalPage+',\''+rname+'\')"><a href="javascript:void(0)">末页</a></li>';
                //计算下一页的页码
                var nextNum =  pb.currentPage + 1;
                if(nextNum>pb.totalPage){
                    nextNum = pb.totalPage;
                }
                var nextPage = '<li  οnclick="javascipt:load('+cid+','+beforeNum+',\''+rname+'\')" class="threeword"><a href="javascript:void(0)">下一页</a></li>';
                //var nextPage = '<li class="threeword"><a href="javascript:;">下一页</a></li>';
                lis += nextPage;
                lis += lastPage;
                //将lis内容设置到 ul
                $("#pageNum").html(lis);
                //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="host_detail.html?rid='+route.rid+'">查看详情</a></p>\n' +
                        '                        </div>\n' +
                        '                    </li>';
                    route_lis += li;
                }
                $("#route").html(route_lis);
                //定位到页面顶部
                window.scrollTo(0,0);
            });
        }
    </script>

这段代码里面需要注意的一点就是拼字符串的时候,一定要注意!!!很容易出错,用双引号之后,里面就用单引号来连接。onclick="javascipt:load('+cid+','+beforeNum+',\''+rname+'\')" class="threeword"><a href="javascript:void(0)">下一页</a></li>';
这里面的rname前面的转义字符也不要忘记!!!!

(2)后台代码

HotelDaoImpl

@Override
    public List<Hotel> findByPage( int start, int pageSize) {
        //String sql = "select * from tab_route where cid = ? and rname like ?  limit ? , ?";
        String sql = " select * from tab_route where 1 = 1 and cid = 2";
        //1.定义sql模板
        StringBuilder sb = new StringBuilder(sql);

        List params = new ArrayList();//条件们

        sb.append(" limit ? , ? ");//分页条件

        sql = sb.toString();

        params.add(start);
        params.add(pageSize);


        return template.query(sql,new BeanPropertyRowMapper<Hotel>(Hotel.class),params.toArray());
    }
    @Override
    public int findTotalCount() {
        //String sql = "select count(*) from tab_route where cid = ?";
        //1.定义sql模板
        String sql = "select count(*) from tab_route where cid = 2 ";
        return template.queryForObject(sql,Integer.class);
    }
    @Override
    public Hotel findByRid(int rid){
        Hotel user = null;
        try {
            //1.定义sql
            String sql = "select * from tab_route where cid=2 and rid= ?";
            //2.执行sql
            user = template.queryForObject(sql, new BeanPropertyRowMapper<Hotel>(Hotel.class), rid);
        } catch (Exception e) {

        }

        return user;
    }

HotelServiceImpl

@Override
    public PageBean<Hotel> pageQuery(int currentPage, int pageSize) {
        //封装PageBean
        PageBean<Hotel> pb = new PageBean<Hotel>();
        //设置当前页码
        pb.setCurrentPage(currentPage);
        //设置每页显示条数
        pb.setPageSize(pageSize);

        //设置总记录数
        int totalCount = hotelDao.findTotalCount();

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

        pb.setList(list);

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


        return pb;
    }

这里注意拼sql语句用where 1 = 1,而且拼的时候注意在后面多加空格!!!!

二、后台

在这里插入图片描述
(我是参照的其他人的前端页面写的,这三个功能基本都是增删改操作,做完一个另外两个是一样的,那我只讲第一个)

1.前台页面

(1)post和get请求

用这两种方式都可以发送到后端,之前一直以为是有区别的。

$.get("user/addUser",$(this).serialize(),function(data){ });
$.post("user/addUser",$(this).serialize(),function(data){ });

(2)name属性

一定要注意写这个属性,这是后端能结收到前端发来的数据关键属性,如果没有这个属性,可能接收不到数据!!!

<div class="form-group draggable">
    <label class="col-sm-3 control-label" >酒店名:</label>
        <div class="col-sm-9">
           <input type="text" name="rname" id="rname" class="form-control" placeholder="请输入酒店名">
		 </div>
</div>

(3)数据回显

数据回显就是values这个属性,还有就是给它设置值,可参考 jq (DOM操作-内容操作),还有注意加values的属性!

<div class="form-group draggable">
	<label class="col-sm-3 control-label" >酒店名:</label>
    	<div class="col-sm-9">
        <input type="text" name="rname" id="rname" value="" class="form-control" placeholder="请输入酒店名"> 		
        </div>
</div>
<script>
    $(function () {
        //获取cid的参数值
        var rid = getParameter("rid");
        $.get("hotel/findHotel",{rid:rid},function (data) {
            alert(data);
            $("#rname").val(data.rname);
            $("#price").val(data.price);
            $("#routeIntroduce").val(data.routeIntroduce);
            $("#rflag").val(data.rflag);
            $("#rdate").val(data.rdate);
            $("#telephone").val(data.telephone);
            $("#isThemeTour").val(data.isThemeTour);
        });
    });
</script>

这里的rid是展示全部数据那里就将rid穿过来的!!!!href="hotel_update.html?rid='+route.rid 注意这个字段!!

'<td><a class="btn btn-default btn-sm" href="hotel_update.html?rid='+route.rid+'">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="javascript:deleteUser('+route.rid+');">删除</a></td>'

2.后端代码

(1)数据封装

		//1.获取数据
        Map<String, String[]> map = request.getParameterMap();

        //2.封装对象
        Hotel hotel = new Hotel();
        try {
            BeanUtils.populate(hotel,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

(2)注意事项

后端的出错大多来自sql语句的错误,字段不匹配和字段名不对。还有就是查询语句,查询为null,如果不进行try…catch就会报错,这一点需要注意!!!!!

@Override
    public Hotel findByRid(int rid){
        Hotel user = null;
        try {
            //1.定义sql
            String sql = "select * from tab_route where cid=2 and rid= ?";
            //2.执行sql
            user = template.queryForObject(sql, new BeanPropertyRowMapper<Hotel>(Hotel.class), rid);
        } catch (Exception e) {

        }

        return user;
    }

总结

链接:全部代码
提取码:uaoo
(前端的样式太多传不上,有需要可找我)

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:03:57  更:2022-04-28 12:03:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:35:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码