2013-01-23 22 views
36

Il seguente tag di JSTL può essere utilizzato per impostare un valore su una variabile in un ambito di richiesta.Operatore ternario in JSTL/EL

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

voglio verificare condizionale, se la variabile value essere impostato è vuota o non e visualizzare il risultato di conseguenza qualcosa di simile a quanto segue, utilizzando <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> 

voglio ridurre la riga di codice utilizzando un'espressione ternario come,

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

Si è valutato in quanto significa in realtà, ma se io interscambio fra l'ordine delle espressioni come,

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

allora è un errore di sintassi che indica,

"$ {valore vuoto 'None': value}" contiene un'espressione non valida (s): javax.el.ELException: errore di analisi: $ {valore vuoto 'None': valore}

Allora perché questo succede?


Sto utilizzando la libreria JSTL 1.1 e il seguente taglib è incluso,

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

Ho copiato e incollato il codice e funziona per me senza errori. – rickz

+0

@rickz - Potrebbe essere ** il problema con la versione della libreria di JSTL che sto usando. Quale libreria stai usando? – Tiny

+0

Sto usando 1.2. – rickz

risposta

43

Ho provato la seguente pagina in Tomcat 5.59, JSP 2.0 eJSTL 1.1. Funzionava senza errori.

<%@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

Ho recentemente scaricato [NetBeans 7.2.1] (http://netbeans.org/downloads/) e [jdk 7] (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads -1880260.html) e riconfigurata l'intera applicazione con cui sto lavorando da capo. NetBeans 7.2.1 ha Apache Tomcat 7.0.27.0 (in precedenza era 6.0.26.0 con NetBeans 6.9.1) che supporta Servlet 3.0 (in precedenza era 2.5) in cui il problema in questione era scomparso. Non ho modificato la libreria JSTL. È ancora JSTL 1.1 come prima. – Tiny