1.后端框架:struts2
2.mysql数据库的部门表结构:
image.png
3.最终实现效果
image.png
4.通过jpa生成实体类
image.png
5.编写MenuVo
private int id;//菜单id
private String menuname;//菜单名称
private String menuurl;//菜单url,只有子菜单有url
private Integer menucode;//父菜单节点id
private Integer leaf;//是否有子菜单,0:无,1:有
private List children;//子菜单集合
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMenuname() {
return menuname;
}
public void setMenuname(String menuname) {
this.menuname = menuname;
}
public String getMenuurl() {
return menuurl;
}
public void setMenuurl(String menuurl) {
this.menuurl = menuurl;
}
public Integer getMenucode() {
return menucode;
}
public void setMenucode(Integer menucode) {
this.menucode = menucode;
}
public Integer getLeaf() {
return leaf;
}
public void setLeaf(Integer leaf) {
this.leaf = leaf;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
5.编写接口
解决思路:
1、先获取当前部门的所有父级节点,
2、再获取当前部门的所有子节点,
3、查询组合(父级节点、当前节点、子节点组合起来)后的节点数据
4、在java中进行遍历生成树形菜单
接口代码MenuAction
package action;
import bean.Menu;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import untity.MenuVo;
public class MenuAction extends ActionSupport {
private List rows = new ArrayList<>();
private Boolean success;
private String msg;
public String list() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("studyPU");
EntityManager em = emf.createEntityManager();
rows=findFather();
success = true;
em.close();
emf.close();
return SUCCESS;
}
//获取父类菜单
public List findFather() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("studyPU");
EntityManager em = emf.createEntityManager();
List menuVoList = new ArrayList<>();
List
for (Menu menu : menuList) {
if (menu.getLeaf() == 1) {
MenuVo menuVo = new MenuVo();
menuVo.setId(menu.getId());
menuVo.setMenuname(menu.getMenuname());
menuVo.setMenuurl(menu.getMenuurl());
menuVo.setMenucode(menu.getMenucode());
menuVo.setLeaf(menu.getLeaf());
menuVo.setChildren(null);
menuVoList.add(menuVo);
}
}
//传进父级ID,查找其子部门
for (MenuVo menuVo : menuVoList) {
menuVo.setChildren(findChild(menuVo.getId(), menuList));
}
return menuVoList;
}
//获取父类菜单下的字类菜单
public List findChild(int id, List
List childList = new ArrayList<>();
for (Menu menu : menuList) {
int menucode = 0;
if (menu.getMenucode() != null) {
menucode = menu.getMenucode();
}
int leaf = menu.getLeaf();
if (leaf == 0) {
if (id == menucode) {
MenuVo menuVo = new MenuVo();
menuVo.setId(menu.getId());
menuVo.setMenuname(menu.getMenuname());
menuVo.setMenuurl(menu.getMenuurl());
menuVo.setMenucode(menu.getMenucode());
menuVo.setLeaf(menu.getLeaf());
childList.add(menuVo);
}
}
}
return childList;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}