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