JavaWeb项目一个众筹网站的开发后台用户菜单

Posted AI数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb项目一个众筹网站的开发后台用户菜单相关的知识,希望对你有一定的参考价值。

mvn命令不能运行:

jar-war-pom之间是可以直接写,优先找这个工程,而不是仓库的位置

pom-pom子父关系,需要去仓库中找,我们需要使用<relativePath>../project-parent/pom.xml</relativePath>

在当前的子pom中,指定一下父pom文件在哪里,就不会优先去仓库中找

<parent>
    <groupId>com.atguigu.project</groupId>
    <artifactId>project-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../project-parent/pom.xml</relativePath>
  </parent>

登陆以后来到控制台,需要显示所有菜单

 

菜单都存在数据库中

t_permission表下添加菜单相关内容

 

 

菜单可能会有子菜单

TPermission中添加

    private List<TPermission> childs;

    public List<TPermission> getChilds() {
        return childs;
    }

    public void setChilds(List<TPermission> childs) {
        this.childs = childs;
    }

 

web层controlller中

登录成功后要获取菜单

DispatcherController负责页面调度

在进入main页面时,要获取所有菜单

并整理好父子菜单关系

省略了导包

package com.atguigu.scw.manager.controller;

@Controller
public class DispatcherController { @Autowired TPermissionService ps; // 伪静态化效果 @RequestMapping(value = "/main.html") public String 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<TPermission> menus = ps.getAllMenus(); // 2.将查到的菜单放在请求域中/session域中 // 菜单这些数据没必要每次来到main都调用service方法进行查询, // 放在session用户,当前用户的这次会话会一直使用 // 只需要去数据库中查一次 session.setAttribute(Constants.USER_MENUS, menus); } return "manager/main"; } } }

新定义了常量USER_MENUS

package com.atguigu.scw.manager.constant;

public class Constants {

    public static final String LOGIN_USER = "loginUser";
    public static final String USER_MENUS = "userMenus";
}

 

因此需要service层中增加

TPermission接口和实现类

package com.atguigu.scw.manager.service;

import java.util.List;

import com.atguigu.scw.manager.bean.TPermission;

public interface TPermissionService {

    // 拿到所有菜单
    public List<TPermission> getAllMenus();
}

实现类

package com.atguigu.scw.manager.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.atguigu.scw.manager.bean.TPermission;
import com.atguigu.scw.manager.dao.TPermissionMapper;
import com.atguigu.scw.manager.service.TPermissionService;

@Service
public class TPermissionServiceImpl implements TPermissionService {

    @Autowired
    TPermissionMapper mapper;

    public List<TPermission> getAllMenus() {
        // 父菜单保存
        List<TPermission> menus = new ArrayList<TPermission>();
        Map<Integer, TPermission> map = new HashMap<Integer, TPermission>();
        // 这是所有菜单:18个菜单
        List<TPermission> list = mapper.selectByExample(null);

        // 递归结束条件,一定得有一个跳出条件
        // 无限级菜单:递归方法
        // public void buildMenus(List<Permission> list){}
        // for(permission p: list){
        // if(hasChilds()){
        // // 拿到当前的子菜单
        // List childs = getCurrentsChilds(p);
        // buildMenus(List<Permission> 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<TPermission> childs = p_menu.getChilds();
                if (childs != null) {
                    // 当前有子菜单
                    childs.add(tPermission);
                } else {
                    // 当前没有子菜单
                    childs = new ArrayList();
                    // 添加当前子菜单
                    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<TPermission>
        // List[Tp1{childMenus},Tp2,Tp3,Tp4]
        // 整理父子关系,将子菜单设置到父菜单的private List<TPermission> childs里面
        // 1.查出父菜单:不推荐
        // List<4> parents = getParents(pid=0)
        // 2.遍历父菜单
        // for(TPermission p:parents){
        // //查出这个的子菜单List<7> childs = getChild(pid=p.id)
        // //p.setChilds(childs);
        // }

        // 采取的方法:一次性查出所有菜单,使用程序进行组合

        return menus;
    }

}

 另一种写法

public class TPermissionServiceImpl implements TPermissionService {

    @Autowired
    public TPermissionMapper tPermissionMapper;

    public List<TPermission> getAllMenus() {
        // 获取所有菜单
        List<TPermission> permissions = tPermissionMapper.selectByExample(null);

        // 顶级父菜单
        List<TPermission> top = new ArrayList<TPermission>();
        // 保存所有菜单到map中,是为了方便取父菜单,不保存到map中则需要自己编写遍历方法
        Map<Integer, TPermission> menus = new HashMap<Integer, TPermission>();
        // 填充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<TPermission>());
                    parent.getChilds().add(tp);
                }else {
                    parent.getChilds().add(tp);
                }
            }
        }
        return top;
    }
}

 

 

菜单处理的一种方式,从父菜单着手:

public class MenusTest {

    static List<TPermission> menusList = new ArrayList<TPermission>();

    // 判断是否有子菜单
    public static boolean hasParent(TPermission tPermission){
        // 只要不等于0都有父菜单
        if (tPermission.getPid() != 0){
            return true;
        }
        return false;
    }

    // 获取父菜单,上面项目用的map
    public static TPermission getParent(TPermission tp){
        for (TPermission t: menusList){
            if (tp.getPid() == t.getId()){
                return t;
            }
        }
        return null;
    }

    public static List<TPermission> getTopMenu(){
        List<TPermission> top = new ArrayList<TPermission>();
        for (TPermission t: menusList){
            if (t.getPid() == 0){
                top.add(t);
            }
        }
        return top;
    }

    // 获取无限极菜单
    public static List<TPermission> buildMenus(){

        // 遍历list
        for (TPermission tp: menusList){
            // 如果有父菜单就加到父菜单的子菜单列表中
            if (hasParent(tp)){
                // 添加到父菜单的列表中
                // 获取父菜单
                TPermission parent = getParent(tp);
                if (parent.getChilds()== null){
                    parent.setChilds(new ArrayList<TPermission>());
                    parent.getChilds().add(tp);
                }else {
                    parent.getChilds().add(tp);
                }
            }
        }
        // 获得顶级父菜单
        return getTopMenu();
    }

    public static void main(String[] args) {

        TPermission p1 =new TPermission();
        p1.setId(1);
        p1.setName("学校管理");
        p1.setPid(0);
        menusList.add(p1);

        TPermission p2 =new TPermission();
        p2.setId(2);
        p2.setName("科目管理");
        p2.setPid(0);
        menusList.add(p2);

        TPermission p3 =new TPermission();
        p3.setId(3);
        p3.setName("文科");
        p3.setPid(2);
        menusList.add(p3);
        TPermission p31 =new TPermission();
        p31.setId(4);
        p31.setName("理科");
        p31.setPid(2);
        menusList.add(p31);
        TPermission p311 =new TPermission();
        p311.setId(5);
        p311.setName("物理");
        p311.setPid(4);
        menusList.add(p311);

        TPermission p312 =new TPermission();
        p312.setId(6);
        p312.setName("化学");
        p312.setPid(4);
        menusList.add(p312);

        TPermission p4 =new TPermission();
        p4.setId(7);
        p4.setName("班级管理");
        p4.setPid(1);
        menusList.add(p4);
        TPermission p5 =new TPermission();
        p5.setId(8);
        p5.setName("教师管理");
        p5.setPid(1);
        menusList.add(p5);
        TPermission p41 =new TPermission();
        p41.setId(9);
        p41.setName("一年二班");
        p41.setPid(7);
        menusList.add(p41);
        TPermission p42 =new TPermission();
        p42.setId(10);
        p42.setName("一年一班");
        p42.setPid(7);
        menusList.add(p42);


        List<TPermission> menus = buildMenus();
        for (TPermission menu: menus){
            System.out.println(menu);
        }
    }
}

 

开始处理jsp

需要对main.jsp中的菜单进行抽取

user_menus.jsp

<%@page import="com.atguigu.scw.manager.constant.Constants"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
 <div class="col-sm-3 col-md-2 sidebar">
            <div class="tree">
                <ul style="padding-left:0px;" class="list-group">
                    <li class="list-group-item tree-closed" >
                        <a href="${ctp }/main.html"><i class="glyphicon glyphicon-dashboard"></i> 控制面板</a> 
                    </li>
                    <!-- 遍历菜单 -->
                    <c:forEach items="<%=session.getAttribute(Constants.USER_MENUS) %>" var="p_menu">
                    <li class="list-group-item tree-closed">
                        <span><i class="${p_menu.icon }"></i> ${p_menu.name } 
                        <span class="badge" style="float:right">${fn:length(p_menu.childs)}</span></span> 
                        <ul style="margin-top:10px;display:none;">
                        <c:forEach items="${p_menu.childs }" var="c_menu">    
                            <li style="height:30px;">
                                <a href="${c_menu.url }"><i class="${c_menu.icon }"></i> ${c_menu.name }</a> 
                            </li>
                        </c:forEach>
                        </ul>
                    </li>
                    </c:forEach>
                    
                    
                </ul>
            </div>
        </div>

main.jsp中引入

<div class="container-fluid">
      <div class="row">
       <%@include file="/WEB-INF/includes/user_menu.jsp" %>
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
          <h1 class="page-header">控制面板</h1>

          <div class="row placeholders">
            <div class="col-xs-6 col-sm-3 placeholder">
              <img data-src="holder.js/200x200/auto/sky" class="img-responsive" alt="Generic placeholder thumbnail">
              <h4>Label</h4>
              <span class="text-muted">Something else</span>
            </div>
            <div class="col-xs-6 col-sm-3 placeholder">
              <img data-src="holder.js/200x200/auto/vine" class="img-responsive" alt="Generic placeholder thumbnail">
              <h4>Label</h4>
              <span class="text-muted">Something else</span>
            </div>
            <div class="col-xs-6 col-sm-3 placeholder">
              <img data-src="holder.js/200x200/auto/sky" class="img-responsive" alt="Generic placeholder thumbnail">
              <h4>Label</h4>
              <span class="text-muted">Something else</span>
            </div>
            <div class="col-xs-6 col-sm-3 placeholder">
              <img data-src="holder.js/200x200/auto/vine" class="img-responsive" alt="Generic placeholder thumbnail">
              <h4>Label</h4>
              <span class="text-muted">Something else</span>
            </div>
          </div>
        </div>
      </div>
    </div>

 

 

 

运行

 

 图标还需要处理一下,加到数据库中

以上是关于JavaWeb项目一个众筹网站的开发后台用户菜单的主要内容,如果未能解决你的问题,请参考以下文章

javaweb 项目的系统权限管理,怎么设计?

javaweb基于ssm框架快递代拿管理系统设计与实现(项目源码)

java项目开发实战--使用ssm框架开发众筹网站

项目一众筹网06_03,给角色分配Auth/菜单或者说是权限回显checkbox建角色与菜单/权限关联关系表执行给角色分配菜单

php金融众筹网站开发|小说在线阅读网站|在线观看漫画网站建设

JavaWeb开发网站,监测用户在线状态