2013-01-23 38 views
36

Das folgende Tag von JSTL kann verwendet werden, um einen Wert für eine Variable in einem Anforderungsbereich festzulegen.Ternärer Operator in JSTL/EL

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

Ich möchte bedingt überprüfen, ob die Variable value gesetzt wird leer ist oder nicht, und das Ergebnis entsprechend etwa wie folgt angezeigt werden, mit <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> 

Ich möchte die Codezeile reduzieren, um einen ternären Ausdruck verwenden wie,

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

Es wird ausgewertet, wie es eigentlich bedeutet, aber wenn ich vertauschen die Reihenfolge der Ausdrücke wie,

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

dann ist es ein Syntaxfehler anzeigt,

"$ {empty Wert 'None': Wert}" enthält ungültigen Ausdruck (e): javax.el.ELException: Fehler beim Analysieren von: $ {empty Wert 'None': Wert}

Warum passiert das?


Ich verwende die JSTL 1.1 Bibliothek und die folgenden taglib enthalten sind,

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
+0

Ich habe Ihren Code kopiert und eingefügt und es funktioniert für mich ohne Fehler. – rickz

+0

@rickz - Es ** könnte ** das Problem mit der Bibliotheksversion von JSTL sein, die ich verwende. Welche Bibliothek verwendest du? – Tiny

+0

Ich benutze 1.2. – rickz

Antwort

43

Getestet habe ich die folgende Seite in Tomcat 5.59, JSP 2.0 und JSTL 1.1. Es lief ohne Fehler.

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

Ich habe kürzlich [NetBeans 7.2.1] (http://netbeans.org/downloads/) und [jdk 7] (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads) heruntergeladen -1880260.html) und habe die gesamte Anwendung, mit der ich arbeite, von Grund auf neu konfiguriert. NetBeans 7.2.1 hat Apache Tomcat 7.0.27.0 (vorher war es 6.0.26.0 mit NetBeans 6.9.1), die Servlet 3.0 unterstützt (vorher war es 2.5) wo das fragliche Problem verschwand. Ich habe die JSTL-Bibliothek nicht geändert. Es ist immer noch JSTL 1.1 wie zuvor. – Tiny

Verwandte Themen