我正在尝试使用JSTL的空操作符来检查对象是否为NULL并相应地输出一些html,但无论如何它似乎总是返回true。所以要么我误解了如何实现这个(这很可能),或者这里有一些错误。无论哪种方式,我需要一个有效的解决方案..如果不是JSTL,那么通过其他方式。这是代码:
<%@page import="com.ksc.models.UserToken"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
UserToken token = (UserToken)session.getAttribute("userToken");
if (token != null) {
System.out.println("***** Token: " + token.toString());
}
%>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a href="/KSC" class="brand">KSC Technology & Sciences</a>
<div class="nav-collapse">
<div class="pull-right">
<ul class="nav">
<c:choose>
<c:when test="${empty token}">
<li><a href="/KSC/account/login">Login</a></li>
</c:when>
<c:otherwise>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<b class="icon-user"></b>
Account
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/KSC/account/my-account">My Account</a></li>
<li><a href="/KSC/account/logout">Logout</a></li>
<c:if test="${token.hasRole('Administrators')}">
<li><a href="/KSC/admin">Dashboard</a></li>
</c:if>
</ul>
</li>
</c:otherwise>
</c:choose>
</ul>
</div>
</div>
</div>
</div>
</div>
正如您所看到的,我希望在用户未登录时输出“登录”链接或在用户登录时输出注销链接。顶部打印令牌的代码向我证明对象是并不总是空的。事实上我看到输出窗口给了我这个:
INFO: ***** Token: com.ksc.models.UserToken@72087294
然而即使我已经过身份验证,UI也始终显示登录链接。是什么给出了什么?
修改
我编写了一些代码,现在开始怀疑这里是否还有其他东西......这是我的代码:
<%@page import="com.ksc.models.UserToken"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
UserToken token = (UserToken)session.getAttribute("userToken");
boolean authorized = (token != null);
if (authorized) {
System.out.println("***** Auth Token: " + token.toString());
}
%>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a href="/KSC" class="brand">KSC Technology & Sciences</a>
<div class="nav-collapse">
<div class="pull-right">
<ul class="nav">
<c:if test="${not authorized}">
<li><a href="/KSC/account/login">Login</a></li>
</c:if>
<c:if test="${authorized}">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<b class="icon-user"></b>
Account
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/KSC/account/my-account">My Account</a></li>
<li><a href="/KSC/account/logout">Logout</a></li>
<c:if test="${token.hasRole('Administrators')}">
<li><a href="/KSC/admin">Dashboard</a></li>
</c:if>
</ul>
</li>
</c:if>
</ul>
</div>
</div>
</div>
</div>
</div>
现在我很确定应该有效。此代码是单个jsp页面内的所有内容,然后将其放入带有<jsp:include>
标记的普通页面中。此外,我正在使用Spring MVC。这些事实中的任何一个(或两者)都会导致这个问题吗?这很奇怪,因为我仍然看到输出窗口显示auth令牌在那里的事实。救命啊!
答案 0 :(得分:0)
在我的控制器方法中将它添加到ModelMap中,然后像这样使用它:
<c:if test="${userToken == null}">
和
<c:if test="${userToken != null}">
它现在有效,但我仍然想知道为什么另一种方式不起作用..非常令人困惑......