使用JSTL标记将布尔值设置为变量?

use*_*403 34 java jsp jstl

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

<c:set var="refreshSent" value="false"/>
Run Code Online (Sandbox Code Playgroud)

现在变量refreshSent有布尔值还是String?

谢谢!

Chr*_*ris 26

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

<c:if test="${refreshSent eq false}">
Run Code Online (Sandbox Code Playgroud)

<c:if test="${refreshSent eq 'false'}">
Run Code Online (Sandbox Code Playgroud)

第二个是字符串比较.

  • 我认为明确说第一个会成功而第二个会失败会澄清答案.我知道这很愚蠢,但我倾向于使用代码,然后才阅读文本.谢谢! (7认同)

Joh*_*n S 10

它是一个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>
Run Code Online (Sandbox Code Playgroud)

在浏览器中输出以下内容:

false : class java.lang.String
false : class java.lang.Boolean
false : class java.lang.String
Run Code Online (Sandbox Code Playgroud)

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

所以如果你使用:

<c:if test="${refreshSent}">
Run Code Online (Sandbox Code Playgroud)

test属性的值将设置为布尔false值。的${refreshSent}在表达结果String,但是由于test属性期望一个boolean,呼叫到Boolean.valueOf("false")制成。


Ste*_*rez 5

我用它来做布尔值

<c:set var="refreshSent" value="${false}"/>
<c:if test="${refreshSent}">
    some code ........
</c:if>
Run Code Online (Sandbox Code Playgroud)