1).樹形控制元件樹形
每個節點都具備以下屬性:
id:節點ID,對載入遠端資料很重要。
text:顯示節點文字。
state:節點狀態,'open' 或 'closed',預設:'open'。如果為'closed'的時候,將不自動展開該節點。
checked:表示該節點是否被選中。
attributes: 被新增到節點的自定義屬性。
children: 一個節點陣列宣告了若干節點。
2).非同步樹說明
樹控制元件讀取URL。子節點的載入依賴於父節點的狀態。當展開一個封閉的節點,如果節點沒有載入子節點,它將會把節點id的值作為http請求引數並命名為’id’,通過URL傳送到伺服器上面檢索子節點。
如果使用者點選父節點需要展開子節點時,會將父節點的id的值當做引數傳遞.
/**
* 業務需求: 使用者通過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);
}
可以利用註解動態獲取引數,並且實現轉化.
//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);
}
/**
* 頁面引數: 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分析
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("提示","新增商品失敗!");
}
});
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);
}
}
@RequestMapping("/save")
public SysResult saveItem(Item item){
try {
itemService.saveItem(item);
return SysResult.success();
}catch (Exception e){
e.printStackTrace();
return SysResult.fail();
}
}
@Override
public void saveItem(Item item) {
//思考:如果每次編輯資料庫 每次都需要操作公共的屬性...
Date date = new Date();
item.setStatus(1).setCreated(date).setUpdated(date);
itemMapper.insert(item);
}
如果再程式碼中頻繁的新增try-cache那麼導致程式碼的可讀性差,程式碼的不易維護…
例如:
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();
}
}
//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中新增程式碼自動填充的程式碼…
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);
}
}
完成商品 更新/刪除/上架/下架 等操作…