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!
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.
Ich benutze das für boolean
<c:set var="refreshSent" value="${false}"/>
<c:if test="${refreshSent}">
some code ........
</c:if>
<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
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.
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.