JSTL+EL 表达式 遍历权限菜单有关问题,求大神解答
JSTL+EL 表达式 遍历权限菜单问题,急求大神解答
我的权限类大概是这样的,
------------------------------------------------------------------
class Permission{
private int Id;
private String name;
//一级菜单
private String parent;
//子菜单
private List<Permission> children;
}
---------------------------------------------------------------
权限的设计是 用户-->角色-->权限
权限表是一级菜单二级菜单都有记录的,只不过有个parent_id项来区分二级菜单属于哪个一级菜单
大概是这样
id name url parent_id
1 一级菜单A # NULL
2 一级菜单B # NULL
3 一级菜单C # NULL
4 二级菜单A # 1
5 二级菜单B # 1
6 二级菜单C # 1
7 二级菜单D # 3
8 二级菜单E # 3
角色_权限表大概是这样
role_id permissions_id
1 1
1 3
1 4
1 5
1 8
--------------------------------------------------------------
现在我要从 角色 获取对应权限并输出JSP页面,困扰的就是二级菜单如何排在一级菜单下面
JSP代码如下:
<li>
<a href="javascript:;">
<i class="fa fa-laptop"></i>
<span>一级菜单</span>
</a>
<ul class="sub">
<li><a href="#">二级菜单</a></li>
<li><a href="#">二级菜单</a></li>
</ul>
</li>
----------------------------------------------------------
然后我想到用JSTL+EL 来做,只遍历角色有的一级菜单,然后遍历这些一级菜单下面有哪些二级菜单(角色权限表里未必包含这些二级菜单),接着判断一级菜单下面的二级菜单是否包含在 角色_权限表里,如果包含则输出,不包含则不输出。
<li> <!--遍历该角色的所有权限(一级和二级)-->
<c:forEach items="${account.getRole().getPermissions()}" var="item">
<c:choose>
<!--判断是否是一级菜单-->
<c:when test="${empty item.parent}">
<a href="#">
<i class="${item.itemIcon}"></i>
<span>${item.name}</span>
</a>
<!-- 遍历这个一级菜单下面的所有二级菜单 -->
<c:forEach items="${item.children}" var="item1">
<!-- 判断这些二级菜单是否包含在 角色权限 表里面-->
<c:if test="${item1是否包含在 角色权限列表里?}">
<ul class="sub">
<li><a href="#">${item1.name}</a></li>
</ul>
</c:if>
</c:forEach>
</c:when>
</c:choose>
</c:forEach>
</li>
-------------------------------------------------------
关键是下面,不知道怎么判断当前遍历的权限是否包含在一个权限列表里(List)
<c:if test="${item1是否包含在 角色权限列表里?}">
<ul class="sub">
<li><a href="#">${item1.name}</a></li>
</ul>
</c:if>
------解决思路----------------------
角色权限表里未必包含这些二级菜单 ,需要在后后台获取到List<Permission> p1 = r1.getPermissions();,然后把二级菜单也加进去啊,然后就可以了啊,要不然在前台判断太麻烦了
我的权限类大概是这样的,
------------------------------------------------------------------
class Permission{
private int Id;
private String name;
//一级菜单
private String parent;
//子菜单
private List<Permission> children;
}
---------------------------------------------------------------
权限的设计是 用户-->角色-->权限
权限表是一级菜单二级菜单都有记录的,只不过有个parent_id项来区分二级菜单属于哪个一级菜单
大概是这样
id name url parent_id
1 一级菜单A # NULL
2 一级菜单B # NULL
3 一级菜单C # NULL
4 二级菜单A # 1
5 二级菜单B # 1
6 二级菜单C # 1
7 二级菜单D # 3
8 二级菜单E # 3
角色_权限表大概是这样
role_id permissions_id
1 1
1 3
1 4
1 5
1 8
--------------------------------------------------------------
现在我要从 角色 获取对应权限并输出JSP页面,困扰的就是二级菜单如何排在一级菜单下面
JSP代码如下:
<li>
<a href="javascript:;">
<i class="fa fa-laptop"></i>
<span>一级菜单</span>
</a>
<ul class="sub">
<li><a href="#">二级菜单</a></li>
<li><a href="#">二级菜单</a></li>
</ul>
</li>
----------------------------------------------------------
然后我想到用JSTL+EL 来做,只遍历角色有的一级菜单,然后遍历这些一级菜单下面有哪些二级菜单(角色权限表里未必包含这些二级菜单),接着判断一级菜单下面的二级菜单是否包含在 角色_权限表里,如果包含则输出,不包含则不输出。
<li> <!--遍历该角色的所有权限(一级和二级)-->
<c:forEach items="${account.getRole().getPermissions()}" var="item">
<c:choose>
<!--判断是否是一级菜单-->
<c:when test="${empty item.parent}">
<a href="#">
<i class="${item.itemIcon}"></i>
<span>${item.name}</span>
</a>
<!-- 遍历这个一级菜单下面的所有二级菜单 -->
<c:forEach items="${item.children}" var="item1">
<!-- 判断这些二级菜单是否包含在 角色权限 表里面-->
<c:if test="${item1是否包含在 角色权限列表里?}">
<ul class="sub">
<li><a href="#">${item1.name}</a></li>
</ul>
</c:if>
</c:forEach>
</c:when>
</c:choose>
</c:forEach>
</li>
-------------------------------------------------------
关键是下面,不知道怎么判断当前遍历的权限是否包含在一个权限列表里(List)
<c:if test="${item1是否包含在 角色权限列表里?}">
<ul class="sub">
<li><a href="#">${item1.name}</a></li>
</ul>
</c:if>
------解决思路----------------------
角色权限表里未必包含这些二级菜单 ,需要在后后台获取到List<Permission> p1 = r1.getPermissions();,然后把二级菜单也加进去啊,然后就可以了啊,要不然在前台判断太麻烦了