web-dev-qa-db-de.com

booleschen Wert mithilfe von JSTL-Tags in eine Variable setzen?

Ich verwende JSTL-Tags. Ich habe folgenden Code.

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

Nun hat die Variable refreshSent einen booleschen Wert oder einen String?

Vielen Dank!

33
user1016403

Es wird ein Boolean sein. Sie können es überprüfen, indem Sie in ein vergleichen 

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

und

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

Der zweite ist ein Stringvergleich.

27
Chris

Ich benutze das für boolean

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

Wenn der Ausdruck in value zu String ausgewertet wird, dann ist der Wert von var refreshSent vom Typ String.

Siehe http://docs.Oracle.com/javaee/5/jstl/1.1/docs/tlddocs/ als Referenz.

Hinter den Kulissen erfolgt eine automatische Typumwandlung.

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

3
Zaki

Es ist eine String.

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

Gibt Folgendes in einem Browser aus:

false : class Java.lang.String
false : class Java.lang.Boolean
false : class Java.lang.String

Wenn Sie jedoch die Variable refreshSent in einem EL-Ausdruck verwenden, für den ein boolean erwartet wird, wird diese durch einen Aufruf an Boolean.valueOf(String) (entsprechend der JSP-Spezifikation ) in ein boolean konvertiert.

Wenn Sie also verwenden:

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

der Wert des test-Attributs wird auf einen booleschen false-Wert gesetzt. Der ${refreshSent}-Ausdruck führt zu einem String, aber da das test-Attribut ein boolean erwartet, wird ein Aufruf von `Boolean.valueOf (" false ") ausgeführt.

1
John S

Ja, es kann boolean und String sein.

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

oder du kannst so verwenden

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

Vielen Dank.

1
mazipan