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 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 黑马旅游网项目心得 -> 正文阅读

[JavaScript知识库]黑马旅游网项目心得

目录

一、前端部分

1、数据展示

2、页面数据序列化

3、name属性

4、获取单条数据的属性值

5、参数类型包含String类型需要转码

二、后端部分

1、BaseServlet

2、writeValue和writeValueAsString的区别

3、获取参数数据

4、封装对象

5、集合查询数据表

三、总结


一、前端部分

1、数据展示

 //列表数展示
            var hotel_lis = "";
            for (var i = 0; i < pb.list.length; i++) {
                var hotel = pb.list[i];
                //获取数据

                var li = ' <tr class="gradeX">\n' +
                    '                        <td>' + hotel.hid + '</td>\n' +
                    '                        <td>' + hotel.hname + '</td>\n' +
                    '                        <td>¥' + hotel.price + '起</td>\n' +
                    '                        <td>' + hotel.hotelIntroduce + '</td>\n' +
                    '                        <td>' + hotel.hflag + '</td>\n' +
                    '                        <td >' + hotel.hdate + '</td>\n' +
                    '                        <td>' + hotel.count + '</td>\n' +
                    '                        <td>' + hotel.sid + '</td>\n' +
                    '                    </tr>';

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

            //将user_lis内容设置到tbody
            $("#hotel").html(hotel_lis);

通过字符串拼接把后台返回的数据拼接到标签体内。

2、页面数据序列化

 //校验通过则发送ajax请求,提交表单数据。(serialize方法把数据序列化为键值对的字符串)
                    $.post("hotel/addHotel", $(this).serialize(), function (data) {
                        //进行服务器的数据处理
                        if (data.flag) {
                            //添加成功,提示
                            alert("酒店添加成功!")
                            location.reload();
                        } else {
                            //添加失败,添加提示信息
                            alert("添加失败,酒店已存在!")
                            location.reload();
                        }
                    });

serialize() 方法通过序列化表单值,创建 URL 编码文本字符串。序列化后通过ajax请求把数据返回到后台进行操作。

3、name属性

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

name 属性用于对提交到服务器后的表单数据进行标识或者在客户端通过 JavaScript 引用表单数据。只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。

4、获取单条数据的属性值

//列表数展示
            var order_lis = "";
            for (var i = 0; i < pb.list.length; i++) {
                var order = pb.list[i];
                //获取数据
                var li = ' <tr class="gradeX">\n' +
                    ' <td>' + order.hid + '</td>\n' +
                    ' <td>' + order.date + '</td>\n' +
                    ' <td>' + order.uid + '</td>\n' +
                    ' <td>' + order.state + '</td>\n' +
                    ' <td><a class="btn btn-default btn-sm" style="color: red" onclick="deleteOrder(' + order.hid + ',' + order.uid + ',\'' + order.date + '\');">删除</a>\n' +
                    ' </tr>';

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

在展示列表数据时,需要把数据的属性作为参数传递进去,String类型的拼接格式为代码所示。

5、参数类型包含String类型需要转码

        //判断rname不为null或者""
        //string 类型需要转码
        if (date) {
            //url解码
            date = window.decodeURIComponent(date);
        }

二、后端部分

1、BaseServlet

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求路径
        String uri = req.getRequestURI();
        //获取请求方法
        String methodName = uri.substring(uri.lastIndexOf('/') + 1);
        //获取方法对象
        try {
            Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this, req, resp);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
    
    public void writeValue(Object obj, HttpServletResponse response) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(), obj);
    }
    
    public String writeValueAsString(Object obj) throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);

    }

Baseservlet继承HttpServlet,定义了service方法,获取请求路径,请求方法以及方法对象。定义writeValue和writeValueAsString方法用于把后台数据转换为json并写回前台。

2、writeValue和writeValueAsString的区别

writeValue(参数,obj):直接将传入的对象序列化为json,并且返回给客户端
writeValueAsString(obj):将传入的对象序列化为json,返回给调用者

相同:将对象转为json字符串

不同:传递的参数

writeValue参数的重载形式:

file :将转换后的json字符串保存到指定的file文件中
writer :将转换后的json字符串保存到字符输出流中
outputStream:将转换后的json字符串保存到字节输出流中
jsonGenerator

使用经验:返回对象使用writeValue,单纯返回字符串使用writeValueAsString。

3、获取参数数据

       //方法一
        Map<String, String[]> map = request.getParameterMap();
        //方法二
         String currentPageStr = request.getParameter("currentPage");

具体根据前台发送的类型来选择,发送的对象使用getParamterMap();发送的具体参数使用getParamter();

4、封装对象

         //获取参数数据
        Map<String, String[]> map = request.getParameterMap();
        //封装对象
        Order order = new Order();
        try {
            BeanUtils.populate(order, map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

5、集合查询数据表

      //通过uid查询order表得到预定酒店的hid的集合
        List<Order> list = orderService.findHid(uid);
        
        //定义集合存储酒店数据
        List<Hotel> hotels = new ArrayList<>();

        PageBean<Hotel> pb = new PageBean<>();

        //通过遍历hid的集合去hotel表查询就酒店的信息
        for (Order order : list) {
            //多个酒店对象的数据
            Hotel hotel = hotelService.findAll(order.getHid());
            hotels.add(hotel);
        }

        //把数据添加到集合
        pb.setList(hotels);

先遍历集合得到集合的数据,再分别区查询数据表,最后把数据添加到另一个集合中进行封装。

三、总结

1、后端

?

?2、前端

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:33:45  更:2022-04-26 11:34:32 
 
开发: 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/24 2:21:43-

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