天天看點

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

  }

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>

解釋下,<c:forEach>标簽可以周遊loginRoleMenu,menu是代表數組中的每一項。${menu[0]和${menu[1]位置由于使用$,是以會被替換為對應值。

5. 測試

如下圖顯示了我們設定在常量中的菜單,其中頁面1和頁面2可以正常跳轉。

JSP+Servlet教育訓練班作業管理系統[5]–加載角色對應菜單