41

我正在使用 JSTL 标签。我有以下代码。

<c:set var="refreshSent" value="false"/>

现在变量refreshSent有布尔值还是字符串?

谢谢!

4

5 回答 5

32

这将是一个布尔值。您可以通过比较来检查它

<c:if test="${refreshSent eq false}">

<c:if test="${refreshSent eq 'false'}">

第二个是字符串比较。

于 2012-09-20T12:35:04.597 回答
11

它是一个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

但是,如果您在预期为refreshSenta 的 EL 表达式中使用该变量boolean,它将boolean通过调用转换为 a Boolean.valueOf(String)(根据JSP 规范)。

因此,如果您使用:

<c:if test="${refreshSent}">

属性的值test将设置为布尔false值。${refreshSent}表达式的结果是 a String,但由于test属性需要 a boolean,因此会调用Boolean.valueOf("false")

于 2019-01-08T18:37:48.520 回答
6

我用这个作为布尔值

<c:set var="refreshSent" value="${false}"/>
<c:if test="${refreshSent}">
    some code ........
</c:if>
于 2014-07-11T07:49:50.790 回答
3
<c:set var="refreshSent" value="false"/>

如果表达式的value计算结果为String; 那么 的值为var refreshSenttype String

请参阅http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/以供参考。

在幕后进行了自动类型转换。

http://today.java.net/pub/a/today/2003/10/07/jstl1.html

于 2012-09-20T12:34:32.873 回答
1

是的,它可以是布尔值和字符串。

<c:if test="${refreshSent}">
    your code...
</c:if>

或者你可以像这样使用

<c:if test="${refreshSent eq 'false'}">
    your code...
</c:if>

谢谢。

于 2016-03-04T08:26:29.073 回答