Sprawdź rozmiar kolekcji za pomocą JSTL


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>

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.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.