JSTL/EL 中的三元运算符

2024-01-18

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

那么它是一个语法错误,表明,

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

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


我正在使用JSTL 1.1库和以下标签库包含在内,

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

我在Tomcat 5.59中测试了以下页面,JSP2.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}" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSTL/EL 中的三元运算符 的相关文章

随机推荐