商品后台管理--商品新增

动态实现商品分类展现

异步树加载控件说明

1).树形控件

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

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

2).异步树说明
树控件读取URL。子节点的加载依赖于父节点的状态。当展开一个封闭的节点,如果节点没有加载子节点,它将会把节点id的值作为http请求参数并命名为’id’,通过URL发送到服务器上面检索子节点。
如果用户点击父节点需要展开子节点时,会将父节点的id的值当做参数传递.
商品后台管理--商品新增_第1张图片

编辑ItemCatController(方式一)

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

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

编辑ItemCatController(方式二)

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

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

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

商品后台管理--商品新增_第2张图片

关于SpringMVC参数传递说明

商品后台管理--商品新增_第3张图片

/**
     * 页面参数:  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).url分析
商品后台管理--商品新增_第4张图片
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("提示","新增商品失败!");
            }
        });

SysResult VO对象的创建

在jt-common中创建VO

//vo对象主要的目的为了与前端页面进行交互
@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);
    }
    //返回值数据作为参数传入
 public static SysResult success(Object data){
        return new SysResult(200,"业务执行成功",data);
    }
    //只想返回提示信息
 public static SysResult success(String msg,Object data){
        return new SysResult(200,"业务执行成功",data);
    }
}

编辑ItemController

/**
 * 业务需求:
 * 完成商品入库操作,如果成功应该返回vo对象
 *     url:/item/save
 * 参数:整个表单数据
 * 返回值:SysResult vo 对象
 */
@RequestMapping("/save")
public SysResult saveItem(Item item, ItemDesc itemDesc){
   /*如果每个控制层都需要处理异常的话这种写法太繁琐
 try{ itemService.saveItem(item); return SysResult.success(); }catch(Exception e){
 e.printStackTrace(); return SysResult.fail(); }*/ //设置一个全局异常处理类
 itemService.saveItem(item,itemDesc);
   return SysResult.success();    }

编辑ItemService

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

全局异常处理机制

业务需求

如果再代码中频繁的添加try-cache那么导致代码的可读性差,代码的不易维护…
例如:
商品后台管理--商品新增_第5张图片

定义全局异常的处理机制

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

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

属性自动填充功能

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;

}

代码自动填充功能

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

@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);

    }
}

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

页面js分析

商品后台管理--商品新增_第6张图片

页面效果展示

商品后台管理--商品新增_第7张图片

你可能感兴趣的:(java,sql,javascript)