传智播客 Java 学院 传智.入云龙
第三天笔记
1 课程计划
后台管理商品的添加功能
1、商品分类选择
2、上传图片
3、富文本编辑器(kindEditor)
4、实现商品的添加
5、课后作业(商品的修改、删除)
2 商品添加功能说明
传智播客 Java 学院 传智.入云龙
如下图:
以上弹框中,我们应该让选择一个:easyUI 的异步树控件,原因:
不用在此对话框加载后全部加载目录所有数据,采用异步树控件,点击哪个查询哪个,相当
好。(提高性能和响应时间)
异步树控件参照:jQuery EasyUI 1.4 版 API 中文版 (Made By Richie696).chm
异步树官方文档(摘抄):
树控件读取 URL。子节点的加载依赖于父节点的状态。当展开一个封闭的节点,如果节点没
有加载子节点,它将会把节点 id 的值作为 http 请求参数并命名为'id',通过 URL 发送到
服务器上面检索子节点。
该项目异步树的结构(可以把 children 去掉:):
{
"id": 1,
"text": "Node 1",
"state": "closed" //如果为父节点则状态为 closed,叶子节点则是 open
}
事件
很多事件的回调函数都包含'node'参数,其具备如下属性:
id:绑定节点的标识值。
传智播客 Java 学院 传智.入云龙
text:显示的节点文本。
iconCls:显示的节点图标 CSS 类 ID。
checked:该节点是否被选中。
state:节点状态,'open' 或 'closed'。
attributes:绑定该节点的自定义属性。
target:目标 DOM 对象。
2.1 商品类目的选择
2.2 数据库
表中的数据为树形结构,可以满足要求
示例 SQL:
SELECT * FROM taotao.tb_item_cat a WHERE a.parent_id=0; ##看第一条数据,此
时观察 is_parent 为 1,本行数据 id=1,接着往下查询
SELECT * FROM taotao.tb_item_cat a WHERE a.parent_id=1; ##看第一条数据,此
时观察 is_parent 为 1,本行数据 id=2,接着往下查询
SELECT * FROM taotao.tb_item_cat a WHERE a.parent_id=2; ##看第一条数据,此
时观察 is_parent 为 0,本行数据 id=3,不是父节点,不需要再往下查询
2.3 功能实现的分析:
请求初始化树形控件的 URL:/item/cat/list
传智播客 Java 学院 传智.入云龙
点击父节点,请求初始化子节点的动作是:tree 控件封装好的,每打开一个父节点,做一
次 ajax 请求
请求参数:id 当前子节点 id,根据此 id 查询子节点
返回结果:
一个 json 数据,是一个列表:
[{
"id": 1,
"text": "Node 1",
"state": "closed" //如果为父节点则状态为 closed,叶子节点则是 open
},{
"id": 1,
"text": "Node 1",
"state": "closed" //如果为父节点则状态为 closed,叶子节点则是 open
}]
2.4 Dao 层
SQL 语句:
SELECT * FROM taotao.tb_item_cat a WHERE a.parent_id=2;
该条件为单表查询,可以使用逆向工程生成的代码
传智播客 Java 学院 传智.入云龙
2.5 Service 层
功能:接收 parentId 参数,根据 parentId 查询子类目类别,返回一个分类列表。
可以创建一个 pojo 来描述一个节点的格式,返回一个 pojo 列表。
创建一个 poojo:
包 含 id 、 text 、 state 属 性 , 因 为 其 他 工 程 也 可 能 用 到 该 pojo , 所 以 应 该 放 到
taotao-common 工程中。
Pojo 类:EUTreeNode.java
package com.taotao.common.pojo;
/**
* easyUI树形控件节点格式
*
Title: EUTreeNode
*
Description:
*
Company: 自由职业
* @author 熊文博
* @date
* @version 1.0
*/
public class EUTreeNode {
2018年6月19日上午9:13:14
private long id; //由于数据库类型为自增长(auto_increment)bigint型,所
以用long
private String text;
private String state;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
传智播客 Java 学院 传智.入云龙
}
Service 层:ItemCatServiceImpl.java
package com.taotao.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.taotao.common.pojo.EUTreeNode;
import com.taotao.mapper.TbItemCatMapper;
import com.taotao.pojo.TbItemCat;
import com.taotao.pojo.TbItemCatExample;
import com.taotao.pojo.TbItemCatExample.Criteria;
import com.taotao.service.ItemCatService;
/**
* 商品分类管理
*
Title: ItemCatServiceImpl
*
Description:
*
Company: www.itcast.com
* @author 入云龙
* @date
* @version 1.0
*/
@Service
public class ItemCatServiceImpl implements ItemCatService {
2015年9月4日上午9:16:50
@Autowired
private TbItemCatMapper itemCatMapper;
@Override
public List
getCatList(long parentId) {
//创建查询条件
TbItemCatExample example = new TbItemCatExample();
Criteria criteria = example.createCriteria();
criteria.andParentIdEqualTo(parentId);
//根据条件查询
List list = itemCatMapper.selectByExample(example);
List resultList = new ArrayList<>();
//把列表转换成treeNodelist
for (TbItemCat tbItemCat : list) {
EUTreeNode node = new EUTreeNode();
传智播客 Java 学院 传智.入云龙
node.setId(tbItemCat.getId());
node.setText(tbItemCat.getName());
node.setState(tbItemCat.getIsParent()?"closed":"open"); //好
像是三元运算符
resultList.add(node);
}
//返回结果
return resultList;
}
}
2.6 Controller
功能:接收页面请求参数,名为 id,调用 Service 查询分类列表,返回的 json 格式是列
表,需要使用@ResponseBody 注解。
Controller:ItemCatController.java
package com.taotao.controller;
import java.util.List;
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;
import com.taotao.common.pojo.EUTreeNode;
import com.taotao.service.ItemCatService;
/**
* 商品分类管理controller
*
Title: ItemCatController
*
Description:
*
Company: 自由职业
* @author 熊文博
* @date
* @version 1.0
*/
@Controller
@RequestMapping("/item/cat") //此@RequestMapping是公用的链接
public class ItemCatController {
2018年6月19日上午9:25:14
传智播客 Java 学院 传智.入云龙
@Autowired
private ItemCatService itemCatService;
@RequestMapping("/list")
@ResponseBody
// private List getCatList(Long id) { //参数为id时使用这个 再
设置默认值即可
private List
getCatList(@RequestParam(value="id",defaultValue="0")Long parentId) {
List list = itemCatService.getCatList(parentId);
return list;
}
}
3 图片上传
3.1 图片上传位置
3.1.1 传统图片管理方式
最传统方式: