我已经设置了一个基于每个用户的角色控制菜单的 session ......现在例如我有这个
<c:set var="role" scope="session" value='<%=((Long) session.getAttribute("role")).longValue()%>' />
<c:if test="${role == 121}">
<div id="menu">
<span class="menu-header">Registration</span>
<ul>
<li><a href="${pageContext.request.contextPath}/registration/organization-registry">Organization Registry</a></li>
</ul>
</div>
</c:if>
<div id="menu">
<span class="menu-header">Directory</span>
<ul>
<li><a href="">Organization</a></li>
</ul>
</div>
现在,如果我想在不登录的情况下转到该页面怎么办?我试图在不登录的情况下转到该页面,但基本上遇到了 NullPointetExcepetion
,因为我没有在角色中存储任何 session 。我在用户登录时设置每个 session 。当未登录时,我想查看不需要任何角色的菜单...例如,我重定向到该页面,其中包含一个链接,其他人可以查看该链接。
如何在未登录时仍然查看目录菜单?
最佳答案
去掉 <c:set>
线完全。你不需要它。 EL ${}
已经在页面、请求、 session 和应用程序范围内搜索属性。 NPE 是因为你调用了 longValue()
引起的在 null
.
记住:你不应该混合老派的 scriptlet <% %>
与现代 EL ${}
.这是没有意义的。你只会迷惑自己。
另见:
关于java - 如何使用 JSTL 确定空 session 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799259/