JSTL / EL中的三元运算符

时间:2013-01-23 14:48:05

标签: jsp jstl el ternary-operator conditional-operator

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

我想使用三元表达式(

)来减少代码行
<c:out default="None" value="${not empty value ? value : 'None'}"/>

它被评估为实际意味着,但如果我交换表达式的顺序,如

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

然后是语法错误,表明

  

“$ {空值?'无':值}”包含无效的表达式:   javax.el.E​​LException:错误解析:$ {空值?'无':值}

那么为什么会这样呢?


我正在使用JSTL 1.1库,并且包含以下taglib,

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

1 个答案:

答案 0 :(得分:52)

我在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}" />