2013-01-23 48 views
36

JSTL的以下標記可用於將值設置爲請求範圍中的變量。JSTL/EL中的三元運算符

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

我希望有條件地檢查,如果被設置變量value爲空,並相應地顯示結果類似於以下,使用<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> 

我想減少的使用三元表達式像代碼行,

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

它被評價爲它實際上意味着但如果我互換等的表達的順序,

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

那麼它是一個語法錯誤指示,

「$ {空值 '無':值}」 包含無效的表達(S): javax.el.E​​LException:錯誤解析:$ {空值 '無':值}

那麼,爲什麼這是否發生?


我使用的JSTL 1.1庫和被包括在下面的taglib,

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

我複製並粘貼了你的代碼,它對我來說沒有錯誤。 – rickz

+0

@rickz - 它**可能會成爲我使用的JSTL庫版本的問題。你在使用哪個庫? – Tiny

+0

我正在使用1.2。 – rickz

回答

43

我在Tomcat的5.59測試了以下頁面,JSP 2.0和JSTL 1.1。它沒有任何錯誤地運行。

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

我最近下載了[NetBeans 7.2.1](http://netbeans.org/downloads/)和[jdk 7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads -1880260.html),並重新配置了我從頭開始重新整理的整個應用程序。 NetBeans 7.2.1具有Apache Tomcat 7.0.27.0(以前是6.0.26.0和NetBeans 6.9.1),它支持Servlet 3.0(以前爲2.5),問題已消失。我沒有更改JSTL庫。它仍然像以前一樣是JSTL 1.1。 – Tiny