mvn命令不能运行:
jar-war-pom之间是可以直接写,优先找这个工程,而不是仓库的位置
pom-pom子父关系,需要去仓库中找,我们需要使用../project-parent/pom.xml
在当前的子pom中,指定一下父pom文件在哪里,就不会优先去仓库中找
com.atguigu.project
project-parent
0.0.1-SNAPSHOT
../project-parent/pom.xml
登陆以后来到控制台,需要显示所有菜单
菜单都存在数据库中
t_permission表下添加菜单相关内容
菜单可能会有子菜单
TPermission中添加
private Listchilds;public ListgetChilds() {returnchilds;
}public void setChilds(Listchilds) {this.childs =childs;
}
web层controlller中
登录成功后要获取菜单
DispatcherController负责页面调度
在进入main页面时,要获取所有菜单
并整理好父子菜单关系
省略了导包
package com.atguigu.scw.manager.controller;
@Controllerpublic classDispatcherController {
@Autowired
TPermissionService ps;//伪静态化效果
@RequestMapping(value = "/main.html")publicString toMainPage(HttpSession session) {//校验,只有登陆的用户才可以到main//判断session中是否有这个用户,如果没有去登录页面
Object object =session.getAttribute(Constants.LOGIN_USER);if (object == null) {//用户没登陆
return "redirect:/login.jsp";
}else{//用户登陆来到main页面//session中没有菜单,或菜单被从session中清除
if (session.getAttribute(Constants.USER_MENUS) == null) {//1.先查出所有菜单,在页面进行显示
List menus =ps.getAllMenus();//2.将查到的菜单放在请求域中/session域中//菜单这些数据没必要每次来到main都调用service方法进行查询,//放在session用户,当前用户的这次会话会一直使用//只需要去数据库中查一次
session.setAttribute(Constants.USER_MENUS, menus);
}return "manager/main";
}
}
}
新定义了常量USER_MENUS
packagecom.atguigu.scw.manager.constant;public classConstants {public static final String LOGIN_USER = "loginUser";public static final String USER_MENUS = "userMenus";
}
因此需要service层中增加
TPermission接口和实现类
packagecom.atguigu.scw.manager.service;importjava.util.List;importcom.atguigu.scw.manager.bean.TPermission;public interfaceTPermissionService {//拿到所有菜单
public ListgetAllMenus();
}
实现类
有
packagecom.atguigu.scw.manager.service.impl;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importcom.atguigu.scw.manager.bean.TPermission;importcom.atguigu.scw.manager.dao.TPermissionMapper;importcom.atguigu.scw.manager.service.TPermissionService;
@Servicepublic class TPermissionServiceImpl implementsTPermissionService {
@Autowired
TPermissionMapper mapper;public ListgetAllMenus() {//父菜单保存
List menus = new ArrayList();
Map map = new HashMap();//这是所有菜单:18个菜单
List list = mapper.selectByExample(null);//递归结束条件,一定得有一个跳出条件//无限级菜单:递归方法//public void buildMenus(List list){}//for(permission p: list){//if(hasChilds()){// //拿到当前的子菜单//List childs = getCurrentsChilds(p);//buildMenus(List list)//}else{// //添加到父菜单,只保存一个大的一级菜单// //menus.add(menus);// //加到上级菜单中//addToParentMenus(p){// //找到当前菜单的父菜单// //p_menus = p.getPid// //当前菜单设置进去//p_menus.addChilds(p);//}//}//}//1.将所有菜单都放在map中//都是引用,如果从map中拿到这个数据改变以后,map中页面变化
for(TPermission tPermission : list) {
map.put(tPermission.getId(), tPermission);
}//二级菜单?
for(TPermission tPermission : list) {if (tPermission.getPid() == 0) {//父菜单,确定4个父菜单
menus.add(tPermission);
}else{//子菜单 ,加入到父菜单中//tPermission(子菜单),拿到父菜单
Integer pid =tPermission.getPid();//拿到父菜单:以pid的值作为map中的菜单id,就是父菜单
TPermission p_menu =map.get(pid);//拿到当前父菜单的子菜单,子菜单会有一些问题//这个list第一次获取是没有的,如果添加一次以后,list是有的
List childs =p_menu.getChilds();if (childs != null) {//当前有子菜单
childs.add(tPermission);
}else{//当前没有子菜单
childs = newArrayList();//添加当前子菜单
childs.add(tPermission);//将当前整理好的childs设置进去
p_menu.setChilds(childs);
}//
//childs.add(tPermission);//p_menu.setChilds(childs);//for (TPermission p_m: list) {//if (p_m.getId() == pid) {//p_m.setChilds(childs);//}//}
}
}//将菜单子父级关系整理好交给页面//List//List[Tp1{childMenus},Tp2,Tp3,Tp4]//整理父子关系,将子菜单设置到父菜单的private List childs里面//1.查出父菜单:不推荐//List<4> parents = getParents(pid=0)//2.遍历父菜单//for(TPermission p:parents){// //查出这个的子菜单List<7> childs = getChild(pid=p.id)// //p.setChilds(childs);//}//采取的方法:一次性查出所有菜单,使用程序进行组合
returnmenus;
}
}
另一种写法
public class TPermissionServiceImpl implementsTPermissionService {
@AutowiredpublicTPermissionMapper tPermissionMapper;public ListgetAllMenus() {//获取所有菜单
List permissions = tPermissionMapper.selectByExample(null);//顶级父菜单
List top = new ArrayList();//保存所有菜单到map中,是为了方便取父菜单,不保存到map中则需要自己编写遍历方法
Map menus = new HashMap();//填充map
for(TPermission tp: permissions){
menus.put(tp.getId(), tp);
}//遍历,将子菜单放到父菜单的childs中去
for(TPermission tp: permissions){//如果是父菜单,加到top中去
if (tp.getPid() == 0){
top.add(tp);
}else{//不是菜单,就要找到其父菜单,并将自己加到父菜单childs列表中,这样遍历完后,所有的子菜单都会进入childs//从map中获取父菜单
TPermission parent =menus.get(tp.getPid());//如果是空,说明还没添加任何子菜单,需要建立列表,然后添加子菜单
if (parent.getChilds() == null){
parent.setChilds(new ArrayList());
parent.getChilds().add(tp);
}else{
parent.getChilds().add(tp);
}
}
}returntop;
}
}
菜单处理的一种方式,从父菜单着手:
public classMenusTest {static List menusList = new ArrayList();//判断是否有子菜单
public static booleanhasParent(TPermission tPermission){//只要不等于0都有父菜单
if (tPermission.getPid() != 0){return true;
}return false;
}//获取父菜单,上面项目用的map
public staticTPermission getParent(TPermission tp){for(TPermission t: menusList){if (tp.getPid() ==t.getId()){returnt;
}
}return null;
}public static ListgetTopMenu(){
List top = new ArrayList();for(TPermission t: menusList){if (t.getPid() == 0){
top.add(t);
}
}returntop;
}//获取无限极菜单
public static ListbuildMenus(){//遍历list
for(TPermission tp: menusList){//如果有父菜单就加到父菜单的子菜单列表中
if(hasParent(tp)){//添加到父菜单的列表中//获取父菜单
TPermission parent =getParent(tp);if (parent.getChilds()== null){
parent.setChilds(new ArrayList());
parent.getChilds().add(tp);
}else{
parent.getChilds().add(tp);
}
}
}//获得顶级父菜单
returngetTopMenu();
}public static voidmain(String[] args) {
TPermission p1=newTPermission();
p1.setId(1);
p1.setName("学校管理");
p1.setPid(0);
menusList.add(p1);
TPermission p2=newTPermission();
p2.setId(2);
p2.setName("科目管理");
p2.setPid(0);
menusList.add(p2);
TPermission p3=newTPermission();
p3.setId(3);
p3.setName("文科");
p3.setPid(2);
menusList.add(p3);
TPermission p31=newTPermission();
p31.setId(4);
p31.setName("理科");
p31.setPid(2);
menusList.add(p31);
TPermission p311=newTPermission();
p311.setId(5);
p311.setName("物理");
p311.setPid(4);
menusList.add(p311);
TPermission p312=newTPermission();
p312.setId(6);
p312.setName("化学");
p312.setPid(4);
menusList.add(p312);
TPermission p4=newTPermission();
p4.setId(7);
p4.setName("班级管理");
p4.setPid(1);
menusList.add(p4);
TPermission p5=newTPermission();
p5.setId(8);
p5.setName("教师管理");
p5.setPid(1);
menusList.add(p5);
TPermission p41=newTPermission();
p41.setId(9);
p41.setName("一年二班");
p41.setPid(7);
menusList.add(p41);
TPermission p42=newTPermission();
p42.setId(10);
p42.setName("一年一班");
p42.setPid(7);
menusList.add(p42);
List menus =buildMenus();for(TPermission menu: menus){
System.out.println(menu);
}
}
}
开始处理jsp
需要对main.jsp中的菜单进行抽取
user_menus.jsp
控制面板
"var="p_menu">
${p_menu.name }${fn:length(p_menu.childs)}
${c_menu.name }