41
votes

I am using JSTL tags. i have below code.

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

Now variable refreshSent has boolean value or String?

Thanks!

5

5 Answers

32
votes

It is going to be a boolean. You can check it by comparing in a

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

and

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

The second is a string comparison.

11
votes

It is a String.

The following JSP code:

<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>

Outputs the following in a browser:

false : class java.lang.String
false : class java.lang.Boolean
false : class java.lang.String

But if you use the refreshSent variable in an EL expression where a boolean is expected, it will be converted to a boolean by a call to Boolean.valueOf(String) (according to the JSP Specification).

So if you use:

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

the value of the test attribute will be set to a boolean false value. The ${refreshSent} expression results in a String, but since the test attribute expects a boolean, a call to Boolean.valueOf("false") is made.

6
votes

I use this for boolean

<c:set var="refreshSent" value="${false}"/>
<c:if test="${refreshSent}">
    some code ........
</c:if>
3
votes
<c:set var="refreshSent" value="false"/>

If the expression in value evaluates to String; then the value of var refreshSent is of type String.

See http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/ for reference.

There is automatic type conversion done behind the scenes.

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

1
votes

Yeah, it's can be boolean and String.

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

or you can use like this

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

Thanks.