web-dev-qa-db-ja.com

JSTL / ELの三項演算子

次のJSTLのタグを使用して、要求スコープの変数に値を設定できます。

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

次のような3項式を使用してコードの行を減らしたい

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

実際の意味で評価されますが、式の順序を入れ替えると、

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

それは、構文エラーであり、

「$ {empty value? 'None':value}」に無効な式が含まれています:javax.el.E​​LException:Error Parsing:$ {empty value? 'None':value}

なぜこれが起こるのですか?


JSTL 1.1ライブラリを使用しており、次のtaglibが含まれています。

<%@taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%>
41
Tiny

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}" />
52
rickz