JSP+Servlet培训班作业管理系统[5]–加载角色对应菜单

1. 本章任务

之前已经实现了登录、登录后跳转管理后台、管理后台显示登录人信息的功能。


本章节实现根据登录用户角色(校长master、教师teacher、学生student),左侧菜单栏显示角色对应菜单的功能。


2. 菜单存储结构

如果菜单比较多,而且是灵活定制的,则最好保存在数据库中。此处的培训班作业管理系统比较简单,每个角色拥有的菜单都是固定的,所以可以直接将菜单信息放入静态变量中保存。


定义常量类Constants,代码如下:


package org.maoge.utils;

import java.util.HashMap;

public class Constants {

// 用于保存角色及对应的菜单信息

public static HashMap<String, String[][]> roleMenuMap = new HashMap<String, String[][]>();

static { // 使用static代码块对roleMenuMap进行初始化

 // 注意,二位数组中的每一组表示一个菜单的信息,又通过map建立了角色名和菜单直接的对应关系

 roleMenuMap.put("student", new String[][] { { "页面1", "page1.jsp" }, { "页面2", "page2.jsp" }, { "不存在页面", "xxxx.jsp" }});

}

}

1

2

3

4

5

6

7

8

9

10

解释下,student角色拥有2个菜单,第一个菜单是页面1,对应jsp是page1.jsp;第二个菜单是页面2,对应jsp是page2.jsp。


3. 登录后将菜单放入Session

登录成功后,根据登录用户的角色信息获取对应的菜单,并放入Session便于前端jsp页面取用。


  user = lc.checkLogin(userName, userPassword);

  if (user == null) {

   // 跳转到错误提示页面,并提示用户不存在

   tipInfo = "用户不存在";

   page = "tip.jsp";

  } else {

   // 登录成功,记录用户信息到Session,同时跳转管理后台页面

   request.getSession().setAttribute("loginUser", user);

   page = "index.jsp";

   // 设置菜单

   String[][] loginMenus = Constants.roleMenuMap.get(user.getUserRole());

   request.getSession().setAttribute("loginMenus", loginMenus);

  }

1

2

3

4

5

6

7

8

9

10

11

12

13

此处要稍微了解下Map(键值对)这种数据结构,否则容易看不懂代码。


4. 页面显示菜单列表

此时我们已经将登录用户的菜单信息放入Session中,名为loginMenus,直接取出显示到页面即可。


 <div id="left">

  <ul>

   <c:forEach items="${loginMenus}" var="menu">

    <li>

    <a href="/HomeworkSystem/RouteServlet?childPage=${menu[1]}">${menu[0]}</a>

    </li>

   </c:forEach>

  </ul>

 </div>

1

2

3

4

5

6

7

8

9

解释下,<c:forEach>标签可以遍历loginRoleMenu,menu是代表数组中的每一项。${menu[0]和${menu[1]位置由于使用$,所以会被替换为对应值。


5. 测试

如下图显示了我们设置在常量中的菜单,其中页面1和页面2可以正常跳转。

JSP+Servlet培训班作业管理系统[5]–加载角色对应菜单


上一篇:巧用手机邮件来设置报警短信息


下一篇:阿里CEO张勇:网络安全需要全生态协作