為了實(shí)現(xiàn)讓系統(tǒng)后臺(tái)的左側(cè)欄菜單列表實(shí)現(xiàn)動(dòng)態(tài)展示的效果颠焦,則通過(guò)后臺(tái)管理對(duì)菜單組件進(jìn)行增刪改查,并通過(guò)遞歸構(gòu)造的方法將查詢結(jié)果以JSON目錄樹的形式返回提供給前臺(tái)頁(yè)面使用权旷。
核心代碼:
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class TreeMenu {
private static final Logger logger = LoggerFactory.getLogger(TreeMenu.class);
//菜單樹形結(jié)構(gòu)
public JSONArray treeMenuList(JSONArray menuList, int parentId) {
JSONArray? childMenuList = new JSONArray();
for (Object object : menuList) {
JSONObject jsonObject = JSONObject.fromObject(object);
int menuId = Integer.parseInt(jsonObject.getString("id"));
int pid = jsonObject.getInt("fatherMenuId");
if (parentId==pid) {
//遞歸遍歷子菜單
JSONArray jsonArray =? treeMenuList(menuList, menuId);
jsonObject.put("childrenMenu", jsonArray);
childMenuList.add(jsonObject);
}
}
logger.info(childMenuList.toString());
return childMenuList;
}
}
其中重要的遞歸算法思路:
???? 遞歸入口:給定的根目錄為遞歸入口砰嘁,即parentId==0替久;
? ? 遞歸出口:查詢結(jié)果中不包含parentMenuId為給定的父菜單parentId,即 parentId攀例!=pid嘉汰;