以下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.ELException:错误解析:$ {空值?'无':值}
那么为什么会这样呢?
我正在使用JSTL 1.1
库,并且包含以下taglib,
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
答案 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}" />