tag lib fmt elseif else jsp jstl el ternary-operator conditional-operator

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}" />