Opérateur ternaire dans JSTL/EL
La balise suivante de la JSTL peut être utilisé pour définir une valeur à une variable dans une requête portée.
<c:set var="value" scope="request" value="someValue"/>
Je veux vérifier, sous certaines conditions, si la variable value
d'être ensemble est vide ou non et d'afficher le résultat en conséquence quelque chose comme ce qui suit, à l'aide <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 à l'aide d'un ternaire expression comme,
<c:out default="None" value="${not empty value ? value : 'None'}"/>
Il est évalué comme il signifie, en fait, mais si je l'échange de l'ordre des expressions comme,
<c:out default="None" value="${empty value ? 'None' : value}"/>
alors c'est une erreur de syntaxe indiquant,
"${valeur vide?'None':valeur}" contient une expression non valide(s):
javax.el.ELException: Erreur d'Analyse: ${valeur vide?'None':valeur}
Alors pourquoi est-ce arrivé?
Je suis en utilisant le JSTL 1.1
bibliothèque et suivants taglib est inclus,
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- J'ai copié-collé ton code et il fonctionne pour moi sans erreur.
- C' pourrait le problème avec la version de la librairie de la JSTL, je suis en utilisant. La bibliothèque que vous utilisez?
- Je suis à l'aide de 1.2.
- Le problème rencontré ici semble être liée à l'EL analyseur, pas de la JSTL. La version de l'API Servlet vous exécutez votre application sur? 3.0 ? 2.5 ? Les plus âgés ?
- Ma Servlet version 2.5.
Vous devez vous connecter pour publier un commentaire.
J'ai testé la page suivante dans Tomcat 5.59, JSP 2.0 et JSTL 1.1. Il s'est exécuté sans erreurs.