Сессии JSP в If if - PullRequest
       1

Сессии JSP в If if

0 голосов
/ 12 апреля 2011

У меня проблемы с пониманием того, как именно JSP работает в терминах сессий ... в основном я устанавливаю сеанс в другом JSP следующим образом:

<%
String category = request.getParameter("category");
session.setAttribute("category", category); %>

затем на другой странице, которую я использую, если условия для генерации HTML основаны на том, какая категория была опубликована, например ::10000

 <% String category = (String) session.getAttribute("category");

if(category == "movie") { 
out.println("Movie Details"); 
} else if (category == "music") { 
out.println("Music Details"); 
} %>

Но кажется, что ни один из двух операторов не выполняется, но если я на самом деле распечатываю переменную категории, она выводится правильно, т.е. отображается фильм или музыка. Есть ли какая-то концепция сессий, которую я не понял? Я искал бесконечные страницы, пытаясь найти ответ на этот вопрос: / Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Вы сравниваете строки неправильно.Вы должны использовать equals(..) вместо ==

==, чтобы проверить, идентичны ли экземпляры, тогда как .equals(..) проверяет, имеют ли две строки одинаковое содержимое.Вы очень редко интересуетесь первым.

Итак, для объектов (в отличие от примитивов, где == - путь), используйте:

if (foo.equals(bar)) { .. }

Когда у вас есть некоторый опытс Java и сервлет API, вы должны рассмотреть некоторые лучшие практики с JSP.Наиболее важным является не писать код Java в JSP. Вот подробное объяснение о том, как и зачем это делать.

1 голос
/ 12 апреля 2011

Божо уже ответил на реальную причину проблемы.В Java значения объекта должны сравниваться методом equals().Строки - это объекты, а не примитивы.Обратите внимание, что эта проблема связана не с JSP, а с базовой Java.

Я просто хотел указать правильный путь для этого: используйте taglibs / EL.Сначала установите, если необходимо, JSTL (например, Tomcat не поставляется с ним из коробки), а затем объявите его поверх вашей JSP.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Ваш первый фрагмент кода может бытьдостигается следующим образом:

<c:set scope="session" var="category" value="${param.category}" />

Ваш второй фрагмент кода может быть получен следующим образом:

<c:if test="${category == 'movie'}">Movie details</c:if>
<c:if test="${category == 'music'}">Music details</c:if>

или

<c:choose>
    <c:when test="${category == 'movie'}">Movie details</c:when>
    <c:when test="${category == 'music'}">Music details</c:when>
    <c:otherwise>Unknown category</c:otherwise>
</c:choose>

Да, сравнение строк по ==действует в EL.Для этого он будет использовать equals().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...