如何使用JSTL确定空会话属性

时间:2013-02-10 15:24:52

标签: java jsp servlets jstl

我根据每个用户的角色设置了一个控制菜单的会话......现在举个例子我有这个

<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基本上是因为我没有在角色中存储任何会话。我在用户登录时设置了每个会话。当没有登录时我想查看不需要任何角色的菜单...例如,我重定向到该页面,其中一个链接可以被其他人查看。

当我没有登录时,如何查看目录菜单?

1 个答案:

答案 0 :(得分:1)

完全摆脱<c:set>行。你不需要它。 EL ${}已经在页面,请求,会话和应用程序范围内搜索属性。导致NPE是因为您在longValue()上调用了null

请记住:您不应该将oldschool scriptlet <% %>与现代EL ${}混合使用。这是没有意义的。你只会迷惑自己。

另见: