• 10-2 图书管理系统(SSM+LayUi)


    返回响应信息工具类

    • 在com.gychen.util里新建Constants和RestRespond
      • Constants
        package com.gychen.util;
        
        /**
         * 常量类
         */
        
        public class Constants {
        
            public final static int OK_CODE = 0;
            public final static int FAIL_CODE = 400;
            public final static int OTHER_FAIL_CODE = 333;
            public final static String  OK_MSG = "请求成功";
            public final static String FAIL_MSG = "请求失败";
            public final static int STATUS_0 = 0;  //可用状态
            public final static int STATUS_1 = 1;   //禁用状态
        
            // 单个对象
            public static final String ITEM = "item";
        
            // 返回的对象列表
            public static final String LIST = "list";
        
            public final static String CACHE_NAME = "KACache";
        
        }
      
      
      • RestRespond
        package com.gychen.util;
        
        import java.util.HashMap;
        import java.util.List;
        
        /**
         * REST 接口返回数据
         *
         * @author gychen
         */
        public class RestResponse extends HashMap<String, Object> {
        
            /**
             * 禁止通过构造函数构造对象,只能通过静态方法获取实例。
             *
             * @see #ok()
             * @see #ok(String)
             * @see #fail()
             * @see #fail(String)
             */
            private RestResponse() {
            }
        
        
        
            /**
             * 设置接口返回的文本消息,属性 key: message
             *
             * @param msg
             * @return
             */
            public RestResponse msg(String msg) {
                this.put(Constants.OK_MSG, msg);
                return this;
            }
        
            /**
             * 设置接口返回的数据对象,属性 key: item
             *
             * @param item
             * @return
             */
            public RestResponse item(Object item) {
                this.put(Constants.ITEM, item);
                return this;
            }
        
            /**
             * 设置接口返回的数据对象列表,属性 key: list
             *
             * @param list
             * @return
             */
            public RestResponse list(List<?> list) {
                this.put("data", list);
                return this;
            }
        
            /**
             * 设置接口返回的数据项,并指定数据项的属性 key
             *
             * @param key
             * @param value
             * @return
             */
            public RestResponse put(String key, Object value) {
                super.put(key, value);
                return this;
            }
        
            /**
             * 接口执行成功的返回数据,其中属性 OK_CODE = 0
             *
             * @return
             */
            public static RestResponse ok() {
                RestResponse result = new RestResponse();
                result.put("code", Constants.OK_CODE);
                result.put("msg", Constants.OK_MSG);
                return result;
            }
        
            /**
             * 接口执行成功的返回数据,并设置文本消息
             *
             * @param msg
             * @return
             */
            public static RestResponse ok(String msg) {
                RestResponse result = new RestResponse();
                result.put("code", Constants.OK_CODE);
                result.put("msg", Constants.OK_MSG).msg(msg);
                return result;
            }
        
            /**
             * 接口执行成功的返回数据,并设置对象数据
             *
             * @param item
             * @return
             */
            public static RestResponse ok(Object item) {
                RestResponse result = new RestResponse();
                result.put("msg", Constants.OK_MSG);
                result.put("code", Constants.OK_CODE).item(item);
                return result;
            }
        
            /**
             * 接口执行成功的返回数据,并设置列表对象数据
             *
             * @param list
             * @return
             */
            public static RestResponse ok(List<?> list) {
                RestResponse result = new RestResponse();
                result.put("code", Constants.OK_CODE);
                result.put("msg",Constants.OK_MSG).list(list);
                return result;
            }
        
            /**
             * 接口执行失败的返回数据,其中属性 FIAL_CODE = 1
             *
             * @return
             */
            public static RestResponse fail() {
                RestResponse result = new RestResponse();
                result.put("code", Constants.FAIL_CODE);
                result.put("msg", Constants.FAIL_MSG);
                return result;
            }
        
            /**
             * 接口执行失败的返回数据,并设置文本消息,其中属性 error = 1, message = {msg}
             *
             * @param msg
             * @return
             */
            public static RestResponse fail(String msg) {
                RestResponse result = new RestResponse();
                result.put("msg", Constants.FAIL_MSG);
                result.put("code", Constants.FAIL_CODE).msg(msg);
                return result;
            }
        
            /**
             * 接口执行失败的返回数据,自定义状态码,其中属性 error = {errcode}
             *
             * @param errcode
             * @return
             */
            public static RestResponse fail(int errcode) {
                RestResponse result = new RestResponse();
                result.put("msg", Constants.FAIL_MSG);
                result.put("code", errcode);
                return result;
            }
        }
      

    新建TypeController

    • 在com.gychen.controller里新建TypeController
    package com.gychen.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class TypeController {
    
        @RequestMapping("/typeIndex")
        public String typeIndex(){
            
            return "type/typeIndex";
        }
    
    
        /**
         * 获取type数据信息 分页
         */
        @RequestMapping("/typeAll")
        @ResponseBody   // 以json格式返回
        public Object typeAll(){
            
            return null;
        }
    }
    
    

    修改typeIndex.jsp

    • 添加jsp头文件和jstl、el、路径信息
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <!-- 获取项目路径和项目其它信息 -->
    <%
        String path=request.getContextPath();
        String basePath=request.getScheme()+
                "://"+request.getServerName()+
                ":"+request.getServerPort()+path+
                "/";
    %>
    
    <div class="layuimini-container layuimini-page-anim">
        <div class="layuimini-main">
    
            <fieldset class="table-search-fieldset">
                <legend>搜索信息</legend>
                <div style="margin: 10px 10px 10px 10px">
                    <form class="layui-form layui-form-pane" action="">
                        <div class="layui-form-item">
                            <div class="layui-inline">
                                <label class="layui-form-label">用户姓名</label>
                                <div class="layui-input-inline">
                                    <input type="text" name="username" autocomplete="off" class="layui-input">
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">用户性别</label>
                                <div class="layui-input-inline">
                                    <input type="text" name="sex" autocomplete="off" class="layui-input">
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">用户城市</label>
                                <div class="layui-input-inline">
                                    <input type="text" name="city" autocomplete="off" class="layui-input">
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">用户职业</label>
                                <div class="layui-input-inline">
                                    <input type="text" name="classify" autocomplete="off" class="layui-input">
                                </div>
                            </div>
                            <div class="layui-inline">
                                <button type="submit" class="layui-btn layui-btn-primary"  lay-submit lay-filter="data-search-btn"><i class="layui-icon">�</i> 搜 索</button>
                            </div>
                        </div>
                    </form>
                </div>
            </fieldset>
    
            <script type="text/html" id="toolbarDemo">
                <div class="layui-btn-container">
                    <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
                    <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
                </div>
            </script>
    
            <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
    
            <script type="text/html" id="currentTableBar">
                <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
                <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
            </script>
    
        </div>
    </div>
    
    <script>
        layui.use(['form', 'table','miniPage','element'], function () {
            var $ = layui.jquery,
                form = layui.form,
                table = layui.table,
                miniPage = layui.miniPage;
    
            table.render({
                elem: '#currentTableId',
                url: '<%=basePath%>typeAll',  // 查询类型数据
                toolbar: '#toolbarDemo',
                defaultToolbar: ['filter', 'exports', 'print', {
                    title: '提示',
                    layEvent: 'LAYTABLE_TIPS',
                    icon: 'layui-icon-tips'
                }],
                cols: [[
                    {type: "checkbox",  50},
                    {field: 'id',  100, title: 'ID', sort: true},   // sort 排序功能
                    {field: 'name',  180, title: '类型名称'},
                    {field: 'remarks',  80, title: '备注信息'},
                    {title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
                ]],
                limits: [10, 15, 20, 25, 50, 100],
                limit: 15,
                page: true,
                skin: 'line'
            });
    
            // 监听搜索操作
            form.on('submit(data-search-btn)', function (data) {
                var result = JSON.stringify(data.field);
                layer.alert(result, {
                    title: '最终的搜索信息'
                });
    
                //执行搜索重载
                table.reload('currentTableId', {
                    page: {
                        curr: 1
                    }
                    , where: {
                        searchParams: result
                    }
                }, 'data');
    
                return false;
            });
    
            /**
             * toolbar事件监听
             */
            table.on('toolbar(currentTableFilter)', function (obj) {
                if (obj.event === 'add') {   // 监听添加操作
                    var content = miniPage.getHrefContent('<%=basePath%>page/table/add.html');
                    var openWH = miniPage.getOpenWidthHeight();
    
                    var index = layer.open({
                        title: '添加用户',
                        type: 1,
                        shade: 0.2,
                        maxmin:true,
                        shadeClose: true,
                        area: [openWH[0] + 'px', openWH[1] + 'px'],
                        offset: [openWH[2] + 'px', openWH[3] + 'px'],
                        content: content,
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });
                } else if (obj.event === 'delete') {  // 监听删除操作
                    var checkStatus = table.checkStatus('currentTableId')
                        , data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                }
            });
    
            //监听表格复选框选择
            table.on('checkbox(currentTableFilter)', function (obj) {
                console.log(obj)
            });
    
            table.on('tool(currentTableFilter)', function (obj) {
                var data = obj.data;
                if (obj.event === 'edit') {
    
                    var content = miniPage.getHrefContent('<%=basePath%>page/table/add.html');
                    var openWH = miniPage.getOpenWidthHeight();
    
                    var index = layer.open({
                        title: '编辑用户',
                        type: 1,
                        shade: 0.2,
                        maxmin:true,
                        shadeClose: true,
                        area: [openWH[0] + 'px', openWH[1] + 'px'],
                        offset: [openWH[2] + 'px', openWH[3] + 'px'],
                        content: content,
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });
                    return false;
                } else if (obj.event === 'delete') {
                    layer.confirm('真的删除行么', function (index) {
                        obj.del();
                        layer.close(index);
                    });
                }
            });
    
        });
    </script>
    

    修改ClassInfoDao

    • 在com.gychen.dao里修改ClassInfoDao
    package com.gychen.dao;
    
    import com.gychen.po.ClassInfo;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    @Component("classDao")
    public interface ClassInfoDao {
        /**
         * 查询所有图书类型信息
         */
    //    @Select("select * from class_info")
    //    List<ClassInfo> queryClassInfoAll();
    
        List<ClassInfo> queryClassInfoAll(@Param(value = "name")String name);
    
    }
    
    

    添加ClassInfoDao.xml

    • 在resources/com.gychen.dao里新建ClassInfoDao.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.gychen.dao.ClassInfoDao" >
    
        <!-- 查询全部信息 -->
        <select id="queryClassInfoAll" resultType="com.gychen.po.ClassInfo">
            select * from class_info
            <where>
                <if test="name!=null">
                    and name like '%${name}%'
                </if>
            </where>
        </select>
    
    </mapper>
    
    • 在ClassInfoService中修改接口信息

    List<ClassInfo> queryClassInfoAll (@Param(value = "name")String name);

    • 修改TypeController
    package com.gychen.controller;
    
    import com.github.pagehelper.PageInfo;
    import com.gychen.po.ClassInfo;
    import com.gychen.service.ClassInfoService;
    import com.gychen.util.RestResponse;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class TypeController {
    
        @Autowired
        private ClassInfoService classInfoService;  // 这里的classInfoService要和ClassInfoServiceImpl中的注解名字相同
        @RequestMapping("/typeIndex")
        public String typeIndex(){
    
            return "type/typeIndex";
        }
    
    
        /**
         * 获取type数据信息 分页
         */
        @RequestMapping("/typeAll")
        @ResponseBody
        public RestResponse typeAll(String name, @RequestParam(defaultValue = "1") Integer page,
                                    @RequestParam(defaultValue = "15") Integer limit){
    
            PageInfo<ClassInfo> pageInfo = classInfoService.queryClassInfoAll(name, page, limit);
    
            return RestResponse.ok(pageInfo.getList());
        }
    }
    
    
    • 修改typeindex.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <!-- 获取项目路径和项目其它信息 -->
    <%
        String path=request.getContextPath();
        String basePath=request.getScheme()+
                "://"+request.getServerName()+
                ":"+request.getServerPort()+path+
                "/";
    %>
    
    <div class="layuimini-container layuimini-page-anim">
        <div class="layuimini-main">
    
            <div class="demoTable">
                类型名称:
                <div class="layui-inline">
                    <input class="layui-input" name="name" id="name" autocomplete="off">
                </div>
                <button class="layui-btn" data-type="reload">搜索</button>
            </div>
    
    
            <script type="text/html" id="toolbarDemo">
                <div class="layui-btn-container">
                    <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
                    <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
                </div>
            </script>
    
            <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
    
            <script type="text/html" id="currentTableBar">
                <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
                <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
            </script>
    
        </div>
    </div>
    
    <script>
        layui.use(['form', 'table','miniPage','element'], function () {
            var $ = layui.jquery,
                form = layui.form,
                table = layui.table,
                miniPage = layui.miniPage;
    
            table.render({
                elem: '#currentTableId',
                url: '<%=basePath%>typeAll',  // 查询类型数据
                toolbar: '#toolbarDemo',
                defaultToolbar: ['filter', 'exports', 'print', {
                    title: '提示',
                    layEvent: 'LAYTABLE_TIPS',
                    icon: 'layui-icon-tips'
                }],
                cols: [[
                    {type: "checkbox",  50},
                    {field: 'id',  100, title: 'ID', sort: true},   // sort 排序功能
                    {field: 'name',  180, title: '类型名称'},
                    {field: 'remarks',  180, title: '备注信息'},
                    {title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
                ]],
                limits: [10, 15, 20, 25, 50, 100],
                limit: 15,
                page: true,
                skin: 'line',
                id: 'testReload'
            });
    
            var $ = layui.$, active = {
                reload: function(){
                    var name = $('#name');
                    console.log(name);
    
                    //执行重载
                    table.reload('testReload', {
                        page: {
                            curr: 1 //重新从第 1 页开始
                        }
                        ,where: {
    
                                name: name.val()
    
                        }
                    }, 'data');
                }
            };
    
            $('.demoTable .layui-btn').on('click', function(){
                var type = $(this).data('type');
                active[type] ? active[type].call(this) : '';
            });
    
            /**
             * toolbar事件监听
             */
            table.on('toolbar(currentTableFilter)', function (obj) {
                if (obj.event === 'add') {   // 监听添加操作
                    var content = miniPage.getHrefContent('<%=basePath%>page/table/add.html');
                    var openWH = miniPage.getOpenWidthHeight();
    
                    var index = layer.open({
                        title: '添加用户',
                        type: 1,
                        shade: 0.2,
                        maxmin:true,
                        shadeClose: true,
                        area: [openWH[0] + 'px', openWH[1] + 'px'],
                        offset: [openWH[2] + 'px', openWH[3] + 'px'],
                        content: content,
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });
                } else if (obj.event === 'delete') {  // 监听删除操作
                    var checkStatus = table.checkStatus('currentTableId')
                        , data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                }
            });
    
            //监听表格复选框选择
            table.on('checkbox(currentTableFilter)', function (obj) {
                console.log(obj)
            });
    
            table.on('tool(currentTableFilter)', function (obj) {
                var data = obj.data;
                if (obj.event === 'edit') {
    
                    var content = miniPage.getHrefContent('<%=basePath%>page/table/add.html');
                    var openWH = miniPage.getOpenWidthHeight();
    
                    var index = layer.open({
                        title: '编辑用户',
                        type: 1,
                        shade: 0.2,
                        maxmin:true,
                        shadeClose: true,
                        area: [openWH[0] + 'px', openWH[1] + 'px'],
                        offset: [openWH[2] + 'px', openWH[3] + 'px'],
                        content: content,
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });
                    return false;
                } else if (obj.event === 'delete') {
                    layer.confirm('真的删除行么', function (index) {
                        obj.del();
                        layer.close(index);
                    });
                }
            });
    
        });
    </script>
    
  • 相关阅读:
    ARM-Linux S5PV210 UART驱动(1)----用户手册中的硬件知识
    可变参数列表---以dbg()为例
    《C和指针》 读书笔记 -- 第7章 函数
    《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用
    支持异步通知的globalfifo平台设备驱动程序及其测试代码
    linux内核中sys_poll()的简化分析
    《C和指针》读书笔记——第五章 操作符和表达式
    测试方法-等价类划分法
    MonkyTalk学习-8-Agent
    MonkyTalk学习-7-Verify-Verify
  • 原文地址:https://www.cnblogs.com/nuister/p/13361210.html
Copyright © 2020-2023  润新知