java web 菜单_【JavaWeb项目】一个众筹网站的开发(七)后台用户菜单

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表下添加菜单相关内容

2c7af00bc90234fc8a47319fe78db907.png

菜单可能会有子菜单

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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值