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

菜单可能会有子菜单

TPermissionMapper中添加

    private List<TPermission> childs;

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

web层controlller中

登录成功后要获取菜单

DispatcherController负责页面调度

省略了导包

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;
} }

开始处理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项目】一个众筹网站的开发(七)后台用户菜单的更多相关文章

  1. 【JavaWeb项目】一个众筹网站的开发(八)后台页面详细设置

    一.user.jsp改造 删除引入菜单 抽取导航栏 nav-bar.jsp,删除引入导航栏 删除引入main.jsp的到好烂 数据库里添加url 报错,url不对 没有/ url正确 action=& ...

  2. 【JavaWeb项目】一个众筹网站的开发(五)后台用户登录功能

    用户模块 1)注册 表单校验,使用校验插件 用户密码需要加密存储 注册成功后来到管理控制台,将用户放在session中,防止以后获取 以后用户经常获取用户id,使用mabatis主键自增策略,保存用户 ...

  3. 【JavaWeb项目】一个众筹网站的开发(四)后台用户注册功能

    重点: 密码加密存储 使用jQuery插件做校验和错误提示等 密码不能明文存储,在数据库中是加密存储的 可逆加密:通过密文使用解密算法得到明文 DES AES 不可逆加密:通过密文,得不到明文 MD5 ...

  4. 【JavaWeb项目】一个众筹网站的开发(一)架构搭建

    本项目是@尚硅谷相关视频的记录. 本项目使用Maven构建,工程架构如下图所示: 一.公司的公共父工程和工具类包 1.父工程 每个公司都有自己的父工程 父工程作用:对公司使用的jar包进行统一管理,别 ...

  5. 【JavaWeb项目】一个众筹网站的开发(九)邮件开发

    Java官方支持邮件开发,Javax-mail jdk中默认没有,需要另外下载 apache的基于Javax-mail开发了commons-mail,更加简单高效,推荐使用 一.电子邮件接收和发送协议 ...

  6. 【JavaWeb项目】一个众筹网站的开发(六)后台用户权限控制

    登陆成功进入控制面板后 左侧的菜单是共同的元素,抽取出来做静态包含 要求必须是按照不同的用户得到不同的菜单 用户做了权限限制,哪个用户能操作哪些内容(链接.按钮.内容) 一.RBAC权限模型 权限管理 ...

  7. 【JavaWeb项目】一个众筹网站的开发(三)第一个网页

    一.bootstrap 本项目采用bootstrap3 bootstrap中文网 https://www.bootcss.com/ 使用bootstrap三步: 1.导入jQuery 2.导入boot ...

  8. 【JavaWeb项目】一个众筹网站的开发(二)架构搭建之架构测试

    1.dao层和pojo都是使用mbg生成,基本的CRUD以及JavaBean 2.将mbg放在dao层,一旦dao层打包以后mbg就删除掉 一.创建数据库用于测试 数据库名称:scw_0325 SQL ...

  9. JavaWeb项目:旅游网站【涉及各种知识】

    JQuery异步请求(ajax) $.ajax({ // 请求方式为get或者post等 type: "GET", // 服务器响应的数据类型 dataType: "js ...

随机推荐

  1. Java高频经典面试题(第一季)四:方法的参数传递机制

    考点? 方法的参数传递机制 String,包装类等对象的不可变性 方法的参数传递机制: ①形参是基本数据类型 传递数据值 ②实参是引用数据类型 传递地址值 特殊的类型:String.包装类等对象不可变 ...

  2. css3 实现可以中英切换的导航条

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  3. react 编写 基于ant.design 页面的参考笔记

    前言 因为我没有系统的学习 react,是边写边通过搜索引擎找相对的问题,看 ant.design的 中文文档 编写的一个单页面, 以下的笔记都是写 gksvideourlr 时记录的. 重新设定表单 ...

  4. vue 点击当前元素改变样式

    template  <ul>    <li v-for="(relation,index) in relations" v-bind:id="relat ...

  5. sql对表的操作

    --insert into pppcopy select * from ppp //从表ppp中获取数据,并将其插入到pppcopy中,只拷贝表的数据,不拷贝表的结构(前提:表pppcopy1存在) ...

  6. Ubuntu如何安装谷歌Chrome浏览器

    这里提供一个Ubuntu安装谷歌浏览器的简单方法. 1. 下载谷歌浏览器安装包 wget https://dl.google.com/linux/direct/google-chrome-stable ...

  7. qt学习(四)主窗选钮,显示新窗口。

    游戏有选区这个习惯, 当然,我特指<冒险岛>了,有的时候就是打开一个主屏幕上五个按钮让你点击进入, 甚至有的时候进去了还要选哪个频道,游戏服务器都得分区,频道来完成功能.现在我们先进入想选 ...

  8. switch 使用使用小技巧

    for (int i=0;i<100;i++) { switch (i) { case 1 ... 10: NSLog(@"case 1 ... 10: = %d",i); ...

  9. Redis入门很简单之五【Jedis和Spring的整合】

    Redis入门很简单之五[Jedis和Spring的整合] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存jedisspring  在上一篇文章中,简单介绍了Jedis的 ...

  10. oracle服务端导出/导入方式expdp/impdp

    1. expdp导出步骤 1.1 用sys管理员登录sqlplus [root@hxjk_test_mysql_redis_file oracle]# sqlplus SQL*Plus: Releas ...