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 頁面效果展現

作業
完成商品 更新/洗掉/上架/下架 等操作…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/144754.html
標籤:其他
