【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>

运行

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

猜你喜欢

转载自www.cnblogs.com/aidata/p/11477439.html