Тернарный оператор в 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"%>
Ответы
Ответ 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}"/>