Ü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>
Sergio del Amo
quelle

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>
Martlark
quelle
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.

Josh
quelle
12

Sie können so verwenden

${fn:length(numList)}
Brad Larson
quelle
-2

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

Supun Dharmarathne
quelle