43

次の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:エラー解析:$ {empty value?'None':value}

では、なぜこれが起こるのでしょうか?


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

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

1 に答える 1

57

次のページをTomcat5.59、JSP 2.0、JSTL1.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}" />
于 2013-01-24T16:20:21.433 に答える