Überprüfen Sie eine Sammlungsgröße mit JSTL


234

Wie kann ich die Größe einer Sammlung mit JSTL überprüfen?

Etwas wie:

<c:if test="${companies.size() > 0}">

</c:if>

Antworten:


429
<c:if test="${companies.size() > 0}">

</c:if>

Diese Syntax funktioniert nur in EL 2.2 oder neuer (Servlet 3.0 / JSP 2.2 oder neuer). Wenn Sie einen XML-Analysefehler haben, weil Sie JSPX oder Facelets anstelle von JSP verwenden, verwenden Sie gtanstelle von >.

<c:if test="${companies.size() gt 0}">

</c:if>

Wenn Sie tatsächlich mit einem EL-Analysefehler konfrontiert sind, verwenden Sie wahrscheinlich eine zu alte EL-Version. fn:length()Dann benötigen Sie die JSTL- Funktion. Aus der Dokumentation :

Länge (java.lang.Object) - Gibt die Anzahl der Elemente in einer Sammlung oder die Anzahl der Zeichen in einer Zeichenfolge zurück.

Fügen Sie dies oben auf der JSP-Seite ein, um den fnNamespace zuzulassen :

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

Oder wenn Sie JSPX oder Facelets verwenden:

<... xmlns:fn="http://java.sun.com/jsp/jstl/functions">

Und verwenden Sie so auf Ihrer Seite:

<p>The length of the companies collection is: ${fn:length(companies)}</p>

So testen Sie mit der Länge einer Sammlung:

<c:if test="${fn:length(companies) gt 0}">

</c:if>

Alternativ können Sie für diesen speziellen Fall auch einfach den EL- emptyOperator verwenden:

<c:if test="${not empty companies}">

</c:if>

47
Ich wollte nur beachten, dass der Operator "leer" nützlich ist, wenn die Größe ermittelt werden muss, um festzustellen, ob die Sammlung nicht leer ist, da er auch nach null sucht.
— Joel

Ich stimme Mark hier zu. Warum mehr Cruft für ein Tag in Ihre Seite importieren? Verwenden Sie Marks Lösung, sie ist sauberer.
— ResourceReaper

Einverstanden - leer ist sauberer. @Joel sollte als vollständige Antwort posten, damit es abgestimmt und akzeptiert werden kann. Viele von uns hier (ich) sind Nicht-JSP-Programmierer, die Snippets von Google und SO kopieren / einfügen, ohne über den ersten Code hinaus nachzudenken, den wir sehen.
— Josh

9
Das OP fragte nach der Überprüfung der Größe, nicht unbedingt nach der Überprüfung, ob sie leer ist. Meine Antwort ermöglicht es auch, kompliziertere Szenarien mit der verfügbaren vollständigen Tag-Bibliothek in Betracht zu ziehen.
— Martlark

Unternehmen müssen eine Variable sein, keine Parameter, andernfalls müssen Sie sie definieren, z. B. für ATG - <dsp: getvalueof var = "Unternehmen" param = "arrayParam" />
— Andriy Boyko

30

Wie von @Joel und @Mark Chorley in früheren Kommentaren vorgeschlagen:

${empty companies}

Dies sucht nach null und leeren Listen / Sammlungen / Arrays. Es gibt Ihnen nicht die Länge, aber es erfüllt das Beispiel im OP. Wenn Sie damit durchkommen können, ist dies nur sauberer als das Importieren einer Tag-Bibliothek und ihrer knusprigen Syntax gt.



-2

Verwenden Sie ${fn:length(companies) > 0}, um die Größe zu überprüfen. Dies gibt einen Booleschen Wert zurück

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.