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>
ご覧のとおり、ユーザーがログインしていないときは「ログイン」リンクを出力し、ユーザーがログインしているときはログアウトリンクを出力したいと思います。トークンを出力する上部のコードは、オブジェクトが常にnullではないことを証明しています。 。私は実際に出力ウィンドウが私にこれを与えるのを見ました:
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>
タグ付きの通常のページに配置されます。さらに、SpringMVCを使用しています。これらの事実のいずれか(または両方)がこの問題を引き起こす可能性がありますか?まだ認証トークンが存在するという事実を表示する出力ウィンドウが表示されているので、奇妙です。ヘルプ!