1.京淘后盾页面剖析(理解)

1.1 页面构造

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><link rel="stylesheet" type="text/css" href="/js/jquery-easyui-1.4.1/themes/default/easyui.css" /><link rel="stylesheet" type="text/css" href="/js/jquery-easyui-1.4.1/themes/icon.css" /><link rel="stylesheet" type="text/css" href="/css/jt.css" /><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></head><body class="easyui-layout">  <div data-options="region:'west',title:'菜单',split:true" style="width:10%;">           <ul class="easyui-tree">               <li>               <span>商品治理</span>               <ul>               <li><a onclick="addTab('商品新增','/item-add')">商品新增</a></li>               <li><a onclick="addTab('商品查问','/item-list')">商品查问</a></li>               <li><a onclick="addTab('商品更新','/item-update')">商品更新</a></li>               </ul>            </li>            <li>               <span>网站内容治理</span>               <ul>               <li>内容新增</li>               <li>内容批改</li>               </ul>            </li>           </ul>   </div>   <div id="tt" class="easyui-tabs" data-options="region:'center',title:'首页'"></div></body><script type="text/javascript">function addTab(title, url){      if ($('#tt').tabs('exists', title)){        $('#tt').tabs('select', title);    } else {        var url2 = "https://map.baidu.com/@12964432.517776728,4826375.366248961,13z";        var content = '<iframe scrolling="auto" frameborder="0"  src="'+url2+'" style="width:100%;height:100%;"></iframe>';        $('#tt').tabs('add',{            title:title,              content:content,              closable:false        });      }}</script></html>

2.商品列表展示

2.1 Item表剖析

2.2 JSON阐明

2.2.1 什么是JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格局。它使得人们很容易的进行浏览和编写。同时也不便了机器进行解析和生成。 JSON实质是String

2.2.2 Object格局

2.2.3 Array格局

2.2.4 嵌套格局


例如:

//1.object格局{id:1,name:"tomcat猫"...}//2.array格局[1,2,3,"打游戏","写代码"]//3.嵌套格局  value能够嵌套   四层嵌套json{"id":1,"name":"哈利波特","hobbys":["敲代码","学魔法","喜爱赫敏","打伏地魔"],"method":[{"type":"火系","name":"三味真火"},{"type":"水系","name":"大海无穷"}]}

2.3 表格数据展示

2.3.1 JSON构造

2.3.2 编辑EasyUITable VO对象

阐明: 对象转化为JSON 调用的是get办法. JSON转护为对象时调用set办法

2.3.3 表格页面剖析

阐明:当增加了分页插件之后,当ajax程序解析时会动静的拼接参数.

2.3.4 编辑ItemController

package com.jt.controller;import com.jt.pojo.Item;import com.jt.vo.EasyUITable;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.jt.service.ItemService;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;import java.util.List;@RestController    //示意返回数据都是JSON@RequestMapping("/item")public class ItemController {    @Autowired    private ItemService itemService;    /**     * 业务: 分页查问商品信息.     * url:  http://localhost:8091/item/query?page=1&rows=20     * 参数: page=1 页数  &rows=20  行数     * 返回值: EasyUITable     */    @RequestMapping("/query")    public EasyUITable findItemByPage(int page,int rows){        return itemService.findItemByPage(page,rows);    }            /*@RequestMapping("/testVO")    @ResponseBody    public EasyUITable testVO(){        Item item1 = new Item();        item1.setId(1000L).setTitle("饮水机").setPrice(200L);        Item item2 = new Item();        item2.setId(2000L).setTitle("电冰箱").setPrice(1800L);        List<Item> rows = new ArrayList<>();        rows.add(item1);        rows.add(item2);        return new EasyUITable(2000L, rows);    }*/}

2.3.4 编辑ItemService

package com.jt.service;import com.jt.pojo.Item;import com.jt.vo.EasyUITable;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.jt.mapper.ItemMapper;import java.util.List;@Servicepublic class ItemServiceImpl implements ItemService {    @Autowired    private ItemMapper itemMapper;    /**     * 分页Sql:     *         查问第一页:         *         select * from tb_item limit 起始地位,查问条数         *            select * from tb_item limit 0,20    共21个数  index[0,19]     *            查问第二页:     *                select * from tb_item limit 20,20    index[20,39]     *            查问第三页:     *                 select * from tb_item limit 40,20     *          查问第N页:     *      *          select * from tb_item limit (page-1)rows,20     * @param page     * @param rows     * @return     */    @Override    public EasyUITable findItemByPage(int page, int rows) {        long total = itemMapper.selectCount(null);        //1.手写分页        int startIndex = (page - 1) * rows;        List<Item> itemList = itemMapper.findItemByPage(startIndex,rows);        return new EasyUITable(total, itemList);    }}

2.3.5 编辑ItemMapper

public interface ItemMapper extends BaseMapper<Item>{    @Select("select * from tb_item order by updated desc limit #{startIndex},#{rows}")    List<Item> findItemByPage(int startIndex, int rows);}

2.3.6 页面成果展示

2.4 MybatisPlus实现分页

2.4.1 编辑ItemService

package com.jt.service;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.jt.pojo.Item;import com.jt.vo.EasyUITable;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.jt.mapper.ItemMapper;import java.util.List;@Servicepublic class ItemServiceImpl implements ItemService {    @Autowired    private ItemMapper itemMapper;        //2.利用MP形式实现分页        IPage mpPage = new Page(page,rows);        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();        queryWrapper.orderByDesc("updated");        mpPage = itemMapper.selectPage(mpPage,queryWrapper);        long total = mpPage.getTotal();    //获取记录总数        List<Item> itemList = mpPage.getRecords();    //获取查问当前页        return new EasyUITable(total, itemList);    }}

2.4.2 增加配置了类

package com.jt.config;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration   //bean标签应用public class MybatisPlusConfig {    //将分页拦截器交了Spring容器治理 MP是Mybatis的加强工具    @Bean    public PaginationInterceptor paginationInterceptor(){        return new PaginationInterceptor();    }}

2.5 数据格式化阐明

2.5.1 格式化价格

1.页面JS阐明

`<th data-options="field:'price',width:70,align:'right',formatter:KindEditorUtil.formatPrice">价格</th>` 

2.格式化代码

2.5.2 格式化状态

1).页面JS

`<th data-options="field:'status',width:60,align:'center',formatter:KindEditorUtil.formatItemStatus">状态</th>` 

2).JS剖析

2.6 实现商品分类回显

2.6.1 业务需要

阐明:当用户展示列表数据时,要求将商品分类信息,进行展示.依据cid返回商品分类的名称

2.6.2 编辑item-list页面

2.6.3 编辑页面JS

编辑 js/common.js

2.6.4 编辑ItemCat POJO对象

在jt-common中增加Itemcat POJO对象

package com.jt.pojo;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;import lombok.experimental.Accessors;@TableName("tb_item_cat")@Data@Accessors(chain = true)public class ItemCat extends BasePojo{    @TableId(type = IdType.AUTO)    private Long id;        //主键    private Long parentId;  //父级ID    private String name;    //名称    private Integer status; //状态信息    private Integer sortOrder;  //排序号    private Boolean isParent;   //是否为父级    /*    * create table tb_item_cat(   id                   bigint not null auto_increment,   parent_id            bigint comment '父ID=0时,代表一级类目',   name                 varchar(150),   status               int(1) default 1 comment '默认值为1,可选值:1失常,2删除',   sort_order           int(4) not null,   is_parent            tinyint(1),   created              datetime,   updated              datetime,   primary key (id));    * */}

2.6.5 页面URL剖析

2.6.6 编辑ItemCatController

package com.jt.controller;import com.jt.pojo.ItemCat;import com.jt.service.ItemCatService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/item/cat")public class ItemCatController {    @Autowired    private ItemCatService itemCatService;    /**     * 需要: 依据itemCatId查问商品分类名称     * url:  http://localhost:8091/item/cat/queryItemName?itemCatId=163     * 参数: itemCatId=163     * 返回值: 商品分类名称     */    @RequestMapping("/queryItemName")    public String queryItemName(Long itemCatId){        ItemCat itemCat = itemCatService.findItemCatById(itemCatId);        return itemCat.getName();    }}

2.6.7 编辑ItemCatService

package com.jt.service;import com.jt.mapper.ItemCatMapper;import com.jt.pojo.ItemCat;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class ItemCatServiceImpl implements ItemCatService{    @Autowired    private ItemCatMapper itemCatMapper;    @Override    public ItemCat findItemCatById(Long itemCatId) {        return itemCatMapper.selectById(itemCatId);    }}

2.6.8 页面成果展示

2.6.9Ajax嵌套问题

阐明: 因为页面中发动2次ajax申请,并且2次Ajax是一种嵌套的关系.
解决方案: 如果遇到ajax嵌套问题 则个别将外部ajax设置为同步状态即可.
扩大常识: JS中闭包概念

3 树形构造展示

3.1 common.js的依赖问题


1.在index.jsp中引入了其余页面

<jsp:include page="/commons/common-js.jsp"></jsp:include>

2.页面引入

3.2 商品分类业务剖析

3.2.1 分级阐明

个别条件下商品分类分为3级.

3.2.2 表结构设计


3.3 树形构造问题

3.3.1 页面JS

3.3.2 JSON构造

[{"id":100,"text":"tomcat","state":"open/closed"}]

3.3.3 封装 EasyUITree 对象

在jt-manage中增加VO对象

3.4 新增页面剖析

3.4.1 页面流转过程

1.点击商品新增按钮
2.发动申请 /page/item-add
3.申请被IndexController中的restFul拦挡
4.实现页面跳转 /WEB/INF/views/item-add.jsp

3.4.2 页面构造剖析

1).页面按钮

2.页面树形构造展示详情

3.4.3 树形构造展示


树控件读取URL。子节点的加载依赖于父节点的状态。当开展一个关闭的节点,如果节点没有加载子节点,它将会把节点id的值作为http申请参数并命名为’id’,通过URL发送到服务器下面检索子节点。
1.用户在默认条件下 如果没有开展子节点,则不会发送申请.
2.当用户关上关闭的节点时,则会将改节点的ID当做参数,向后端服务器申请.

3.4.4 编辑ItemCatController

/**     * 业务需要: 实现商品分类树形构造展示     * url地址:   http://localhost:8091/item/cat/list     * 参数:      id= 父级节点的ID     * 返回值:    List<EasyUITree>     */    @RequestMapping("/list")    public List<EasyUITree> findItemCatList(Long id){        //临时只查问一级商品分类信息        long parentId = (id==null?0:id);        return itemCatService.findItemCatList(parentId);    }

3.4.5 编辑ItemCatService

@Overridepublic List<EasyUITree> findItemCatList(long parentId) {    //思路.返回值的数据从哪来? VO 转化 POJO数据 //1.实现数据库查问 QueryWrapper queryWrapper = new QueryWrapper();    queryWrapper.eq("parent_id", parentId);    List<ItemCat> catList = itemCatMapper.selectList(queryWrapper);    //2.筹备返回值数据 List<EasyUITree> treeList = new ArrayList<>();    //3.实现数据的转化 catList转化为 treeList for (ItemCat itemCat : catList) {        long id = itemCat.getId();       //获取ID值 String text = itemCat.getName(); //获取商品分类名称 String state = itemCat.getIsParent() ? "closed" : "open";        EasyUITree easyUITree = new EasyUITree(id, text, state);        treeList.add(easyUITree);    }    return treeList;}

3.4.6 页面成果展示