You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-user@tomcat.apache.org by Andy <an...@fritter.net> on 2005/05/30 21:31:52 UTC

c:choose not evaluating correctly

Hi All,

I have a menu in which I want to display a 'login' link when an object
called 'userSession' does not exist in the session scope, and a 'logout'
link when the 'userSession' object does exist in the seesion scope.

I'm using Struts, and the 'userSession' object is set in an Action.execute()
method when a form is submitted containing a valid username and password
i.e. -

        UserSession s = new UserSession();
        s.setUsername(username);
        // Save the user session object
        request.getSession().setAttribute("userSession",s);

So I figure this is all I have to do is -

    <c:choose>
        <c:when test="${empty sessionScope.userSession}">
            <html:link action="/login"><bean:message
key="main.menu.login"/></html:link>
        </c:when>
        <c:otherwise>
            <html:link action="/logout"><bean:message
key="main.menu.logout"/></html:link>
        </c:otherwise>
    </c:choose>

However in the test case where I have not logged in, so the action that sets
the userSession object is not invoked, this doesn't work as expected. The
else part is always evaluated, indicating that sessionScope.userSession
isn't empty when I know it is! If I print out an attribute of the
userSession object -

<jsp:getProperty name="userSession" property="username"></jsp:getProperty>

I get 'null' displayed - this is correct because the userSession object
doesn't exist, but the c:choose doesn't evaluate correctly.

Clearly I'm doing something wrong, but I just can't see what it is, or even
if it's a JSTL issue.

Thanks,

Andy.






---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org


RE: c:choose not evaluating correctly

Posted by Andy <an...@fritter.net>.
Thanks, but I still get the same result, it's as if the 'test' function just
refuses to work. Here's the test page I'm using -

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

<html>
<head>
    <link rel="stylesheet" type="text/css"
          href="<html:rewrite page="base.css" />" />
    <title><bean:message key="welcome.title"/></title>
</head>

Username:
<jsp:useBean id="userSession" scope="session"
class="template.filter.UserSession"/>
<jsp:getProperty name="userSession" property="username"></jsp:getProperty>

<table>
<tr>
    <td>
    <c:choose>
        <c:when test="${null == userSession.username}">
            <html:link action="/login"><bean:message key="main.menu.login"/>
		</html:link>
        </c:when>
        <c:otherwise>
            <html:link action="/logout"><bean:message
key="main.menu.logout"/>
		</html:link>
        </c:otherwise>
    </c:choose>
    </td>
</tr>
</table>
</body>
</html>

>-----Original Message-----
>From: Lieven De Keyzer [mailto:lieven_dekeyzer@hotmail.com]
>Sent: 30 May 2005 23:32
>To: taglibs-user@jakarta.apache.org
>Subject: RE: c:choose not evaluating correctly
>
>
>Try using
>
><c:when test="${null == sessionScope.userSession}">
>
>>From: "Andy" <an...@fritter.net>
>>Reply-To: "Tag Libraries Users List" <ta...@jakarta.apache.org>
>>To: <ta...@jakarta.apache.org>
>>Subject: c:choose not evaluating correctly
>>Date: Mon, 30 May 2005 20:31:52 +0100
>>
>>
>>Hi All,
>>
>>I have a menu in which I want to display a 'login' link when an object
>>called 'userSession' does not exist in the session scope, and a 'logout'
>>link when the 'userSession' object does exist in the seesion scope.
>>
>>I'm using Struts, and the 'userSession' object is set in an
>>Action.execute()
>>method when a form is submitted containing a valid username and password
>>i.e. -
>>
>>         UserSession s = new UserSession();
>>         s.setUsername(username);
>>         // Save the user session object
>>         request.getSession().setAttribute("userSession",s);
>>
>>So I figure this is all I have to do is -
>>
>>     <c:choose>
>>         <c:when test="${empty sessionScope.userSession}">
>>             <html:link action="/login"><bean:message
>>key="main.menu.login"/></html:link>
>>         </c:when>
>>         <c:otherwise>
>>             <html:link action="/logout"><bean:message
>>key="main.menu.logout"/></html:link>
>>         </c:otherwise>
>>     </c:choose>
>>
>>However in the test case where I have not logged in, so the action that
>>sets
>>the userSession object is not invoked, this doesn't work as expected. The
>>else part is always evaluated, indicating that sessionScope.userSession
>>isn't empty when I know it is! If I print out an attribute of the
>>userSession object -
>>
>><jsp:getProperty name="userSession" property="username"></jsp:getProperty>
>>
>>I get 'null' displayed - this is correct because the userSession object
>>doesn't exist, but the c:choose doesn't evaluate correctly.
>>
>>Clearly I'm doing something wrong, but I just can't see what it
>is, or even
>>if it's a JSTL issue.
>>
>>Thanks,
>>
>>Andy.
>>
>>
>>
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
>>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org


RE: c:choose not evaluating correctly

Posted by Lieven De Keyzer <li...@hotmail.com>.
Try using

<c:when test="${null == sessionScope.userSession}">

>From: "Andy" <an...@fritter.net>
>Reply-To: "Tag Libraries Users List" <ta...@jakarta.apache.org>
>To: <ta...@jakarta.apache.org>
>Subject: c:choose not evaluating correctly
>Date: Mon, 30 May 2005 20:31:52 +0100
>
>
>Hi All,
>
>I have a menu in which I want to display a 'login' link when an object
>called 'userSession' does not exist in the session scope, and a 'logout'
>link when the 'userSession' object does exist in the seesion scope.
>
>I'm using Struts, and the 'userSession' object is set in an 
>Action.execute()
>method when a form is submitted containing a valid username and password
>i.e. -
>
>         UserSession s = new UserSession();
>         s.setUsername(username);
>         // Save the user session object
>         request.getSession().setAttribute("userSession",s);
>
>So I figure this is all I have to do is -
>
>     <c:choose>
>         <c:when test="${empty sessionScope.userSession}">
>             <html:link action="/login"><bean:message
>key="main.menu.login"/></html:link>
>         </c:when>
>         <c:otherwise>
>             <html:link action="/logout"><bean:message
>key="main.menu.logout"/></html:link>
>         </c:otherwise>
>     </c:choose>
>
>However in the test case where I have not logged in, so the action that 
>sets
>the userSession object is not invoked, this doesn't work as expected. The
>else part is always evaluated, indicating that sessionScope.userSession
>isn't empty when I know it is! If I print out an attribute of the
>userSession object -
>
><jsp:getProperty name="userSession" property="username"></jsp:getProperty>
>
>I get 'null' displayed - this is correct because the userSession object
>doesn't exist, but the c:choose doesn't evaluate correctly.
>
>Clearly I'm doing something wrong, but I just can't see what it is, or even
>if it's a JSTL issue.
>
>Thanks,
>
>Andy.
>
>
>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
>



---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org