testattribut in JSTL <c:if> tag

Don

Ich sah einen Code wie den folgenden in einem JSP

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

Meine Verwirrung ist über dem "=", das im Wert des test attribute. My understanding was that anything included within Attributs erscheint. Mein Verständnis war, dass alles, was in <%= %> is printed to the output, but surely the value assigned to test must be a Boolean, so why does this work? enthalten ist, in die Ausgabe gedruckt wird, aber sicherlich muss der Demtest zugewiesene Wert ein boolescher Wert sein, warum also funktioniert das?

Gibt es für Bonuspunkte eine Möglichkeit, den Attributwert darüber zu ändern, dass er keinen Scriptlet-Code verwendet? Vermutlich bedeutet das, stattdessen EL zu verwenden.

Jubel,

Antwort auf "testattribut in JSTL &lt;c:if&gt; tag " 5 von antworten

Attribute in JSP-Tag-Bibliotheken können im Allgemeinen entweder statisch sein oder auf Anforderung aufgelöst werden. Wenn sie auf Anforderungszeit aufgelöst werden, löst der JSP ihren Wert zur Laufzeit auf und gibt die Ausgabe an das Tag weiter. Dies bedeutet, dass Sie so ziemlich jeden JSP-Code in das Attribut setzen können und das Tag sich entsprechend der Ausgabe verhält, die erzeugt.

Wenn Sie sich die jstl taglib-Dokumente ansehen, können Sie sehen, welche Attribute reuest time sind und welche nicht. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

<%=%> selbst wird an die Ausgabe gesendet, im Kontext der JSTL wird es auf eine Zeichenfolge

ausgewertet.

Der Ausdruck zwischen dem <%= %> wird ausgewertet, bevor das c:if-Tag ausgewertet wird. Angenommen, |request.isUserInRole| gibt |true| zurück, ihr Beispiel würde zuerst ausgewertet:

<c:if test="true">
    <li>user</li>
</c:if>

und dann das c:if-Tag ausgeführt.

Alles, was das Attribut test attribute looks for to determine if something is true is the string "true" (case in-sensitive). For example, the following code will print "Hello world!" sucht, um festzustellen, ob etwas wahr ist, ist die Zeichenfolge "true" (Groß-/Kleinschreibung in Sensitive). Der folgende Code wird z. B. "Hello world!" drucken.

<c:if test="true">Hello world!</c:if>

Der Code innerhalb des <%= %> returns a boolean, so it will either print the string "true" or "false", which is exactly what the gibt einen booleschen Wert zurück, sodass er entweder die Zeichenfolge "true" oder "false" ausdruckt, was genau das ist, was das <c:if> tag looks for. Tag sucht.

Sie können auch so etwas wie

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
verwenden