我正在使用 JSTL 标签。我有以下代码。
<c:set var="refreshSent" value="false"/>
现在变量refreshSent有布尔值还是字符串?
谢谢!
这将是一个布尔值。您可以通过比较来检查它
<c:if test="${refreshSent eq false}">
和
<c:if test="${refreshSent eq 'false'}">
第二个是字符串比较。
它是一个String
.
以下 JSP 代码:
<c:set var="refreshSent" value="false" />
<c:set var="refreshSent2" value="${false}" />
<c:set var="refreshSent3" value="${'false'}" />
<div>
<div>${refreshSent} : ${refreshSent['class']}</div>
<div>${refreshSent2} : ${refreshSent2['class']}</div>
<div>${refreshSent3} : ${refreshSent3['class']}</div>
</div>
在浏览器中输出以下内容:
false : class java.lang.String
false : class java.lang.Boolean
false : class java.lang.String
但是,如果您在预期为refreshSent
a 的 EL 表达式中使用该变量boolean
,它将boolean
通过调用转换为 a Boolean.valueOf(String)
(根据JSP 规范)。
因此,如果您使用:
<c:if test="${refreshSent}">
属性的值test
将设置为布尔false
值。${refreshSent}
表达式的结果是 a String
,但由于test
属性需要 a boolean
,因此会调用Boolean.valueOf("false")
。
我用这个作为布尔值
<c:set var="refreshSent" value="${false}"/>
<c:if test="${refreshSent}">
some code ........
</c:if>
<c:set var="refreshSent" value="false"/>
如果表达式的value
计算结果为String
; 那么 的值为var refreshSent
type String
。
请参阅http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/以供参考。
在幕后进行了自动类型转换。
是的,它可以是布尔值和字符串。
<c:if test="${refreshSent}">
your code...
</c:if>
或者你可以像这样使用
<c:if test="${refreshSent eq 'false'}">
your code...
</c:if>
谢谢。