2006-京淘Day06

1 商品后台管理

1.1 动态实现商品分类展现

1.1.1 异步树加载控件说明

1).树形控件树形

每个节点都具备以下属性:

id:节点ID,对加载远程数据很重要。
text:显示节点文本。
state:节点状态,'open''closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。
checked:表示该节点是否被选中。
attributes: 被添加到节点的自定义属性。
children: 一个节点数组声明了若干节点。

2).异步树说明
树控件读取URL。子节点的加载依赖于父节点的状态。当展开一个封闭的节点,如果节点没有加载子节点,它将会把节点id的值作为http请求参数并命名为’id’,通过URL发送到服务器上面检索子节点。
如果用户点击父节点需要展开子节点时,会将父节点的id的值当做参数传递.
在这里插入图片描述

1.1.2 编辑ItemCatController(方式一)

 /**
     * 业务需求: 用户通过ajax请求,动态获取树形结构的数据.
     * url:  http://localhost:8091/item/cat/list
     * 参数: 只查询一级商品分类信息   parentId = 0
     * 返回值结果:  List<EasyUITree>
     *
     *  注意事项:
     *          1.树形结构初始化时不会传递任何信息.只有展开子节点时传递Id
     *          2.页面传递什么样的数据,后端必须接收什么样的数据
     *
     *  id: 296
     */
    @RequestMapping("/list")
    public List<EasyUITree> findItemCatList(Long id){
    
    

        Long parentId = (id==null?0L:id);
        return itemCatService.findItemCatList(parentId);
    }

1.1.3 编辑ItemCatController(方式二)

可以利用注解动态获取参数,并且实现转化.

//2.一般写业务需要见名知意
    @RequestMapping("/list")
    public List<EasyUITree> findItemCatList(
                @RequestParam(value = "id",defaultValue = "0") Long parentId){
    
    

        //方式1
        //Long parentId = (id==null?0L:id);
        return itemCatService.findItemCatList(parentId);
    }

在这里插入图片描述

1.2 关于SpringMVC参数传递说明

在这里插入图片描述

/**
     * 页面参数:  http://请求路径:/方法名称 ?id=1  name="tomcat"
     * 对象:   1.request对象 页面给服务器参数  2.response对象 服务器给页面的响应数据.
     *
     * @param id
     * @param name
     * @return
     */
    @RequestMapping("/xxxx")
    public String xxx(Long id, String name, Item item){
    
    

        /*
        1.基本类型属性赋值.
        String id = request.getParameter("id");
        Long idLong = Long.valueOf(id);
        String strArray = request.getParameter("array");
        String[]  strArrays = strArray.split(",");
        String name = request.getParameter("namexxxxx");*/
        //2.利用item对象获取属性
        /*item.getId() ~~~~去除get的前缀~~~~~~~Id~~首字母小写~~~"id"
        String id = request.getParameter("id");
        id----封装set方法----执行业务调用item.setId(id);
        Item.......*/
    }

总结:
1.正确编辑html标签 name属性必须书写正确 一般条件下与pojo属性相同.
2.参数接收时,校验属性的类型及属性名称是否正确. POJO属性必须写包装类型.
3.有些特定的属性可以利用SpringMVC 进行动态的转化 数组/list集合/map集合等.

1.3 商品新增

1.3.1 页面分析

1).url分析
在这里插入图片描述
2).参数分析
在这里插入图片描述
3).页面JS分析

 /*
           * $.post(url地址,参数,回调函数)
           ajax参数传递的类型有几种:
                1.json格式  {"id":"1","name":"tomcat"}
                2.字符串拼接 "id=1&name='tomcat'"
        */
		$.post("/item/save",$("#itemAddForm").serialize(), function(data){
    
    
			if(data.status == 200){
    
    
				$.messager.alert('提示','新增商品成功!');
			}else{
    
    
				$.messager.alert("提示","新增商品失败!");
			}
		});

1.3.2 SysResult VO对象的创建

package com.jt.vo;

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

//SysResult 主要的目的是为了与页面进行交互.  ajax/json
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SysResult {
    
    

    private Integer status;  //200成功   201 失败
    private String  msg;     //服务器提示信息   成功  失败
    private Object  data;    //服务器返回值数据.

    //可以利用static的静态方法 将数据动态返回
    public static SysResult fail(){
    
    

        return new SysResult(201, "业务执行失败", null);
    }

    /**
     *  1.只需要返回状态码信息   200
     *  2.需要返状态及业务数据   200/data
     *  3.返回提示信息/data业务数据
     * @return
     */
    public static SysResult success(){
    
    

        return new SysResult(200, "业务执行成功!", null);
    }
    //String json = "{key:value}"
    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);
    }
}

1.3.3 编辑ItemController

@RequestMapping("/save")
	public SysResult saveItem(Item item){
    
    
		try {
    
    
			itemService.saveItem(item);
			return SysResult.success();
		}catch (Exception e){
    
    
			e.printStackTrace();
			return SysResult.fail();
		}
	}

1.3.4 编辑ItemService

@Override
	public void saveItem(Item item) {
    
    
		//思考:如果每次编辑数据库 每次都需要操作公共的属性...
		Date date = new Date();
		item.setStatus(1).setCreated(date).setUpdated(date);
		itemMapper.insert(item);
	}

1.4 全局异常处理机制

1.4.1 业务需求

如果再代码中频繁的添加try-cache那么导致代码的可读性差,代码的不易维护…
例如:
在这里插入图片描述

1.4.2 定义全局异常的处理机制

package com.jt.aop;

import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

//@ControllerAdvice  //拦截controller层
//@ResponseBody
@RestControllerAdvice   //定义全局异常的处理类   AOP=异常通知
public class SystemAOP {
    
    

    /**
     *  定义全局异常的方法  当遇到了什么异常时,程序开始执行   参数一般class类型
     *  如果一旦发生异常,则应该输出异常的信息,之后返回错误数据即可.
     */
    @ExceptionHandler({
    
    RuntimeException.class})
    public Object systemAop(Exception e){
    
    
        e.printStackTrace();
        return SysResult.fail();
    }
}

1.5 属性自动填充功能

1.5.1 MP自动填充说明

//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
    
    
	@TableField(fill = FieldFill.INSERT) //入库时自动添加
	private Date created;
	@TableField(fill = FieldFill.INSERT_UPDATE) //入库/更新操作自动添加
	private Date updated;

}

1.5.2 代码自动填充功能

说明:在jt-common中添加代码自动填充的代码…

package com.jt.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component  //将对象交给spring容器管理
public class MyMetaObjectHandler implements MetaObjectHandler {
    
    

    @Override
    public void insertFill(MetaObject metaObject) {
    
    
        Date date = new Date(); //保证时间一致
        this.setInsertFieldValByName("created", date,metaObject);
        this.setInsertFieldValByName("updated", date,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    
    

        this.setUpdateFieldValByName("updated", new Date(), metaObject);

    }
}

1.6 商品分类目录的回显-更新操作

1.6.1 页面js分析

在这里插入图片描述

1.6.2 页面效果展现

在这里插入图片描述

作业

完成商品 更新/删除/上架/下架 等操作…

猜你喜欢

转载自blog.csdn.net/qq_16804847/article/details/108842969