JSTL: проверьте, нет ли строки

Я пытаюсь проверить в JSTL, если атрибут сеанса пуст. Однако атрибут пуст. JSTL рассматривает его как непустой атрибут.

Это жесткий код, который я пытаюсь заменить JSTL. Этот код работает правильно:

<% if (request.getAttribute("error") != null) { %>
    <div class="alert alert-danger">
        <strong>Oh snap, something wrong, maybe the following error could help you out?<br /></strong>
        <%= request.getAttribute("error")%>
    </div>
<% } %>

Вот как я заменил его на JSTL. Если флажок установлен, атрибут ошибки не пуст, но он пуст.

<c:if test="${not empty sessionScope.error}">
    <div class="alert alert-danger">
        <strong>Oh snap, something wrong, maybe the following error could help you out?<br /></strong>
        <c:out value="${sessionScope.error}" />
    </div>
</c:if>

Ответ 1

Добавьте библиотеку JSTL и объявите основной taglib:

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

эквивалент JSTL

<% if (request.getAttribute("error") != null) { %>

является

<c:if test="${not empty error}">

Ответ 2

Я пытаюсь проверить в JSTL, если session attribute пуст

Вы должны проверить область сеанса не в области запроса.

Это должно быть

<c:if test="${not empty sessionScope.error}">

вместо

<c:if test="${not empty requestScope.error}">

Если вы не уверены в области, то используйте без области видимости во всей области сверху вниз (страница, запрос, сеанс, наконец, в приложении)

<c:if test="${not empty error}">