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

解释下,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);
			}

此处要稍微了解下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可以正常跳转。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
采用Eclipse 编写的关于省市县三级菜单采用JSP +servlet+MYSQL ,数据库表的数据文件在src文件夹中 mysql> show tables; +----------------+ | Tables_in_area | +----------------+ | area | | cities | | provinces | +----------------+ 3 rows in set (0.00 sec) mysql> desc provinces; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | pid | char(6) | NO | | NULL | | | province | varchar(100) | NO | | | | +----------+--------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) mysql> desc cities; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | cid | char(6) | NO | | NULL | | | city | varchar(40) | NO | | NULL | | | pid | char(6) | NO | | NULL | | +-------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) mysql> desc area; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | aid | char(6) | NO | | NULL | | | area | varchar(40) | NO | | NULL | | | cid | char(6) | NO | | NULL | | +-------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值