乐趣区

关于java:CGB2010京淘项目Day05

cgb2010- 京淘我的项目 Day05

1 实现商品分类树形构造展示

1.1 商品分类数据结构剖析

阐明: 个别的条件下 商品分类分为 3 级.

1.2 商品分类数据分析

/_查问商品分类一级菜单_/
SELECT * FROM tb_item_cat WHERE parent_id = 0
/_查问商品分类二级菜单_/
SELECT * FROM tb_item_cat WHERE parent_id = 1
/_查问商品分类三级菜单_/
SELECT * FROM tb_item_cat WHERE parent_id = 40

1.3 树形构造案例

1.3.1 编辑 html 页面

`<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EasyUI-3- 菜单按钮 </title>
<script type="text/javascript"
    src="/js/jquery-easyui-1.4.1/jquery.min.js"></script>
<script type="text/javascript"
    src="/js/jquery-easyui-1.4.1/jquery.easyui.min.js"></script>
<script type="text/javascript"
    src="/js/jquery-easyui-1.4.1/locale/easyui-lang-zh_CN.js"></script>
<link rel="stylesheet" type="text/css"
    href="/js/jquery-easyui-1.4.1/themes/icon.css" />
<link rel="stylesheet" type="text/css"
    href="/js/jquery-easyui-1.4.1/themes/default/easyui.css" />
<script type="text/javascript">
    /* 通过 js 创立树形构造 */
    $(function(){$("#tree").tree({
            url:"tree.json",        // 加载近程 JSON 数据
            method:"get",            // 申请形式  POST
            animate:true,            // 示意显示折叠端口动画成果
            checkbox:true,            // 表述复选框
            lines:true,                // 示意显示连接线
            dnd:true,                // 是否拖拽
            onClick:function(node){    // 增加点击事件
                
                // 控制台
                console.info(node);
            }
        });
    })
</script>
</head>
    <body>
        <h1>EasyUI- 树形构造 </h1>
        
        <ul id="tree"></ul>
    </body>
</html>` 



1.3.2 查看 JSON 数据结构

1.3.3 弹出框成果展示

1.4 商品分类树形构造展示

1.4.1 页面构造剖析

1). 类型定义

2). 查看页面 JS

3). 查看 Ajax 申请是否失常发送

1.4.2 异步树加载控件

树控件读取 URL。子节点的加载依赖于父节点的状态。当开展一个关闭的节点,如果节点没有加载子节点, 它将会把节点 id 的值作为 http 申请参数并命名为’id’,通过 URL 发送到服务器下面检索子节点

1.4.3 编辑 ItemCatController

`/**
     * 业务: 实现商品分类的查问
     * URL 地址: http://localhost:8091/itemCat/list?id=xxx
     * 申请参数: 传递节点的 ID
     * 返回值:  List<EasyUITree> 对象   页面 JS-VO~~~~POJO--DB
     */
    @RequestMapping("/list")
    public List<EasyUITree> findItemCatList(Long id){
        //1. 查问一级商品分类信息
        Long parentId = (id==null?0L:id);
        return itemCatService.findItemCatList(parentId);
    }` 



1.4.4 编辑 ItemCatService

 `/**
     * 外围问题: 将 POJO 对象转化为 VO 对象
     * @param parentId
     * @return
     */
    @Override
    public List<EasyUITree> findItemCatList(Long parentId) {
        //2. 定义 VO 的返回值
        List<EasyUITree> treeList = new ArrayList<>();

        //1. 依据 parentId 查询数据库记录
        QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id", parentId);
        List<ItemCat> itemCatList = itemCatMapper.selectList(queryWrapper);
        for (ItemCat itemCat : itemCatList){ // 数据的转化
            long id = itemCat.getId();  // 获取主键信息
            String text = itemCat.getName();  // 获取节点的名称
            // 如果是父级, 默认条件下处于敞开状态
            String state = itemCat.getIsParent()?"closed":"open";
            EasyUITree easyUITree = new EasyUITree(id,text,state);
            treeList.add(easyUITree);
        }
        return treeList;
    }` 



1.4.5 页面成果展示

2 商品新增

2.1 页面构造剖析

1). 页面格局

2). 页面 JS 剖析

3). 申请参数

2.2 页面 JS 剖析

2.3 编辑 SysResult 对象

阐明: SysResult 对象是零碎级别的返回值信息. 通常与页面 JS 进行交互. 之后获取服务器端解决是否正确的后果, 之后在页面中进行数据的显示.

`package com.jt.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SysResult {
    // 属性个数:  1.status 200/201   2.msg 服务器提示信息  3.data 服务器返回值数据
    private Integer status;    //200 正确   201 示意失败
    private String msg;        // 服务器提示信息
    private Object data;       // 服务器返回的数据

    // 实现办法的封装
    public static SysResult fail(){return new SysResult(201,"服务器运行失败!!",null);
    }

    public static SysResult success(){return new SysResult(200, "服务器运行胜利!!", null);
    }

    public static SysResult success(Object data){return new SysResult(200, "服务器运行胜利!!", data);
    }

    public static SysResult success(String msg,Object data){return new SysResult(200, msg, data);
    }
}` 



2.4 编辑 ItemController

`/**
     * 业务阐明: 实现商品的入库操作
     * URL 地址:    http://localhost:8091/item/save
     * 申请参数: 整个 form 表单 利用对象进行接管
     * 返回值:   SysResult 对象
     */
     @RequestMapping("/save")
     public SysResult saveItem(Item item){
        try {itemService.saveItem(item);
            return SysResult.success();}catch (Exception e){e.printStackTrace();
            return SysResult.fail();}
     }` 



2.5 编辑 ItemService

`@Override
    public void saveItem(Item item) {Date date = new Date();
        item.setStatus(1).setCreated(date).setUpdated(date);
        itemMapper.insert(item);
        //int a = 1/0;
    }` 


3. 全局异样解决机制

3.1 需要剖析

阐明: 通过 try-catch 形式能够捕捉异样. 然而如果代码中有大量的数据须要通过 try-catch 的形式进行操作, 会导致代码的构造凌乱. 最好的形式能够采纳全局异样解决的形式实现.

3.2 定义全局异样解决机制

`// 定义全局异样的解决机制
@RestControllerAdvice
public class SystemAOP {@ExceptionHandler({RuntimeException.class})
    public Object result(Exception e){e.printStackTrace();
        return SysResult.fail();}
}` 



4. 主动填充实现

4.1 业务阐明

更新工夫 / 批改工夫都是须要手动编辑的. 是否实现一种性能能够主动将数据填充. 简化代码.

4.2 MP 实现数据填充

4.2.1 定义填充注解

4.2.2 编辑填充配置文件

`@Component  // 将对象交给 Spring 容器治理
public class MyMetaObjectHandler implements MetaObjectHandler {
    // 定义入库操作的赋值
    @Override
    public void insertFill(MetaObject metaObject) {Date date = new Date();
        this.setFieldValByName("created",date,metaObject);
        this.setFieldValByName("updated",date,metaObject);
    }

    // 定义更新操作赋值
    @Override
    public void updateFill(MetaObject metaObject) {this.setFieldValByName("updated",new Date(),metaObject);
    }
}` 


5 商品编辑操作

5.1 工具栏介绍

阐明: toolbar 是关键字 示意定义工具栏菜单属性 利用对象的形式封装菜单的性能

5.2 商品工具栏

5.2.1 查看页面 JS

1). 动静获取选中元素的 ID

 `function getSelectionsIds(){
        // 抉择的是整个 list 汇合页面
        var itemList = $("#itemList");
        // 该 datagrid 办法是 ui 外部的函数 动静获取选中的元素信息
        var sels = itemList.datagrid("getSelections");
        // 动静获取选中元素的 ID 的值
        var ids = [];
        for(var i in sels){
            // 将数据增加到数组中
            ids.push(sels[i].id);
        }
        // 将数组依照指定的字符进行链接
        ids = ids.join(",");
        return ids;
    }` 



2). 编辑的元素个数的 JS

3). 实现数据回显

5.3 实现商品分类名称回显

5.3.1 业务思路

5.3.2 实现商品分类回显

5.3.3 页面成果展示

6 作业

6.1 实现商品更新操作.

`1.URL 地址   2. 提交参数   3. 返回值后果 JS 中
2. 数据库依据主键更新 ` 



6.2 实现商品删除操作

6.3 实现商品上架 / 下架操作

退出移动版