web-dev-qa-db-fra.com

Opérateur ternaire en JSTL / EL

La balise suivante de JSTL peut être utilisée pour définir une valeur sur une variable dans une étendue de demande.

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

Je veux vérifier conditionnellement, si la variable value en cours de définition est vide ou non et afficher le résultat en conséquence quelque chose comme ce qui suit, en utilisant <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>

Je veux réduire la ligne de code en utilisant une expression ternaire comme,

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

Il est évalué comme cela signifie réellement, mais si j'échange l'ordre des expressions comme,

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

alors c'est une erreur de syntaxe indiquant,

"$ {valeur vide? 'Aucun': valeur}" contient une ou des expressions non valides: javax.el.ELException: Erreur d'analyse: $ {valeur vide? 'Aucun': valeur}

Alors pourquoi cela se produit-il?


J'utilise le JSTL 1.1 bibliothèque et le taglib suivant est inclus,

<%@taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%>
41
Tiny

J'ai testé la page suivante dans Tomcat 5.59, JSP 2.0 et JSTL 1.1. Il a fonctionné sans aucune erreur.

<%@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}" />
52
rickz