在JSTL / EL三元运算符(Ternary operator in JSTL/EL)

2019-07-18 14:06发布

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

然后它是指示了语法错误,

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

那么,为什么会出现这种情况?


我使用JSTL 1.1库,包含了下面的taglib,

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

Answer 1:

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


文章来源: Ternary operator in JSTL/EL