Sprawdź rozmiar kolekcji za pomocą JSTL

234

Jak mogę sprawdzić rozmiar kolekcji za pomocą JSTL?

Coś jak:

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

</c:if>
Sergio del Amo
źródło

Odpowiedzi:

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

</c:if>

Ta składnia działa tylko w wersji EL 2.2 lub nowszej (Servlet 3.0 / JSP 2.2 lub nowszej). Jeśli występuje błąd analizy składni XML, ponieważ zamiast JSP używasz JSPX lub Facelets, użyj gtzamiast >.

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

</c:if>

Jeśli rzeczywiście napotykasz błąd analizy EL, prawdopodobnie używasz zbyt starej wersji EL. Będziesz wtedy potrzebował fn:length()funkcji JSTL . Z dokumentacji :

length (java.lang.Object) - Zwraca liczbę elementów w kolekcji lub liczbę znaków w ciągu.

Umieść to u góry strony JSP, aby umożliwić fnprzestrzeń nazw:

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

Lub jeśli używasz JSPX lub Facelets:

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

I użyj tego na swojej stronie:

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

Aby przetestować na podstawie długości kolekcji:

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

</c:if>

Alternatywnie, w tym konkretnym przypadku możesz również po prostu użyć emptyoperatora EL :

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

</c:if>
Martlark
źródło
47
Chciałem tylko zauważyć, że jeśli potrzeba uzyskania rozmiaru polega na ustaleniu, czy kolekcja nie jest pusta, operator „pusty” jest przydatny, ponieważ sprawdza również, czy jest pusta.
Joel
Zgadzam się z Markiem tutaj. Po co importować więcej cruft na swoją stronę dla jednego tagu? Użyj rozwiązania Marka, jest czystsze.
ResourceReaper
Uzgodnione - puste jest czystsze. @Joel powinien opublikować pełną odpowiedź, aby można było głosować i zaakceptować. Wielu z nas tutaj (ja) jest programistami spoza jsp kopiującymi / wklejającymi razem fragmenty Google i SO bez większego zastanowienia poza pierwszym fragmentem kodu, który widzimy.
Josh
9
OP zapytał o sprawdzenie rozmiaru, niekoniecznie o sprawdzenie, czy jest pusty, moja odpowiedź pozwala również na rozważenie bardziej skomplikowanych scenariuszy z dostępną pełną biblioteką znaczników.
Martlark,
firmy muszą być var, a nie parametr, w przeciwnym razie musisz to zdefiniować, np. dla ATG - <dsp: getvalueof var = "company" param = "arrayParam" />
Andriy Boyko
30

Jak sugerowali @Joel i @Mark Chorley we wcześniejszych komentarzach:

${empty companies}

To sprawdza puste i puste listy / kolekcje / tablice. Nie zapewnia ci długości, ale spełnia przykład z PO. Jeśli możesz sobie z tym poradzić, jest to po prostu czystsze niż importowanie biblioteki znaczników i jej skorumpowanej składni gt.

Josh
źródło
12

Możesz użyć w ten sposób

${fn:length(numList)}
Brad Larson
źródło
-2

użyj, ${fn:length(companies) > 0}aby sprawdzić rozmiar. Zwraca wartość logiczną

Supun Dharmarathne
źródło