jsp - lib - Operador ternario en JSTL/EL
jstl else tag (1)
La siguiente etiqueta de JSTL se puede usar para establecer un valor para una variable en un ámbito de solicitud.
<c:set var="value" scope="request" value="someValue"/>
Quiero verificar condicionalmente, si el value
la variable value
está configurando está vacío o no, y mostrar el resultado de acuerdo con algo como el siguiente, usando <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>
Quiero reducir la línea de código usando una expresión ternaria como,
<c:out default="None" value="${not empty value ? value : ''None''}"/>
Se evalúa como realmente significa, pero si intercambio el orden de las expresiones como,
<c:out default="None" value="${empty value ? ''None'' : value}"/>
entonces es un error de sintaxis que indica,
"$ {valor vacío? ''Ninguno'': valor}" contiene expresiones inválidas: javax.el.ELException: Análisis de errores: $ {valor vacío? ''Ninguno'': valor}
Entonces, ¿por qué pasa ésto?
Estoy usando la biblioteca JSTL 1.1
y se incluye el siguiente taglib,
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Probé la siguiente página en Tomcat 5.59, JSP 2.0 y JSTL 1.1. Funcionó sin ningún error.
<%@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}" />