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.
InformationsquelleAutor Tiny | 2013-01-23