Подтвердить что ты не робот

Тернарный оператор в JSTL/EL

Следующий тег JSTL может использоваться для установки значения переменной в области запроса.

<c:set var="value" scope="request" value="someValue"/>

Я хочу проверить условно, если установленная переменная value пуста или нет и отображает результат соответственно следующим образом: <c:when>...</c:when>.

<c:choose>
    <c:when test="${not empty value}">
        <c:out default="None" value="${value}"/>
    </c:when>
    <c:otherwise>
        <c:out default="None" value="None"/>
    </c:otherwise>
</c:choose>

Я хочу уменьшить строку кода, используя тернарное выражение, например

<c:out default="None" value="${not empty value ? value : 'None'}"/>

Он оценивается так, как он на самом деле означает, но если я меняю порядок выражений вроде

<c:out default="None" value="${empty value ? 'None' : value}"/>

то это синтаксическая ошибка, указывающая,

"$ {пустое значение? 'None': значение}" содержит недопустимые выражения: javax.el.ELException: Анализ ошибок: ${пустое значение? 'None': значение}

Так почему это происходит?


Я использую библиотеку JSTL 1.1 и включен следующий taglib,

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

Ответ 1

Я тестировал следующую страницу в Tomcat 5.59 JSP 2.0 и JSTL 1.1. Он работал без ошибок.

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<c:set var="value" scope="request" value="someValue"/>
<c:out default="None" escapeXml="true" value="${not empty value?value:'None'}"/>
<c:out default="None" escapeXml="true" value="${empty value?'None':value}"/>
<c:set var="value" scope="request" value=""/>
<br/>
<c:out default="None" escapeXml="true" value="${not empty value?value:'None'}"/>
<c:out default="None" escapeXml="true" value="${empty value?'None':value}"/>