2013-01-23 17 views
36

Następujący znacznik JSTL może być użyty do ustawienia wartości zmiennej w zasięgu żądania.Operator potrójny w JSTL/EL

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

Chcę sprawdzić warunkowo, jeśli zmienna value ustawiany jest pusta lub nie i wyświetlić wynik odpowiednio coś jak poniżej, używając <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> 

Chcę zmniejszyć linii kodu, używając potrójny wyraz podobny,

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

To jest oceniany jako to faktycznie oznacza, ale jeśli ja zamienić kolejność wyrazów podobnych,

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

to jest błąd składni wskazujący,

"$ {wartość pusta 'Brak': wartość}" zawiera nieprawidłową ekspresją (s): javax.el.ELException: błąd analizy: $ {wartość pustą 'none': value}

więc dlaczego czy to się stało?


używam biblioteki JSTL 1.1 oraz następujące taglib wliczono

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

Skopiowałem i wkleiłem twój kod i działa on dla mnie bezbłędnie. – rickz

+0

@rickz - To ** może ** być problemem z bibliotekową wersją JSTL, której używam. Z której biblioteki korzystasz? – Tiny

+0

Używam 1.2. – rickz

Odpowiedz

43

Testowałem następującą stronę w Tomcat 5.59, JSP 2,0 i JSTL 1.1. Działał bez błędów.

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

Niedawno pobrałem [NetBeans 7.2.1] (http://netbeans.org/downloads/) i [jdk 7] (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads -1880260.html) i ponownie skonfigurowałem całą aplikację, z którą pracuję od nowa od zera. NetBeans 7.2.1 ma Apache Tomcat 7.0.27.0 (wcześniej był 6.0.26.0 z NetBeans 6.9.1), który obsługuje Servlet 3.0 (poprzednio był to 2.5), gdzie problem znikał. Nie zmieniłem biblioteki JSTL. Wciąż jest to JSTL 1.1, jak wcześniej. – Tiny