zoukankan      html  css  js  c++  java
  • 【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表下添加菜单相关内容

    菜单可能会有子菜单

    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>

    运行

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

  • 相关阅读:
    poj2240
    poj1135
    poj1062
    poj3278
    2218 补丁vs错误
    必做: 1041、1024、1077、2218、1183(较难)
    poj2828
    poj3253
    洛谷P1122 最大子树和
    1074 食物链
  • 原文地址:https://www.cnblogs.com/aidata/p/11477439.html
Copyright © 2011-2022 走看看