Vérifier la taille d'une collection avec JSTL

234

Comment puis-je vérifier la taille d'une collection avec JSTL?

Quelque chose comme:

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

</c:if>
Sergio del Amo
la source

Réponses:

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

</c:if>

Cette syntaxe fonctionne uniquement dans EL 2.2 ou plus récent (Servlet 3.0 / JSP 2.2 ou plus récent). Si vous êtes confronté à une erreur d'analyse XML parce que vous utilisez JSPX ou Facelets au lieu de JSP, utilisez gtplutôt à la place de >.

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

</c:if>

Si vous êtes réellement confronté à une erreur d'analyse EL, vous utilisez probablement une version EL trop ancienne. Vous aurez alors besoin de la fn:length()fonction JSTL . De la documentation :

length (java.lang.Object) - Renvoie le nombre d'éléments dans une collection ou le nombre de caractères dans une chaîne.

Mettez ceci en haut de la page JSP pour autoriser l' fnespace de noms:

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

Ou si vous utilisez JSPX ou Facelets:

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

Et utilisez comme ceci dans votre page:

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

Donc, pour tester avec la longueur d'une collection:

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

</c:if>

Alternativement, pour ce cas spécifique, vous pouvez également simplement utiliser l' emptyopérateur EL :

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

</c:if>
Martlark
la source
47
Je voulais juste noter que si le besoin d'obtenir la taille est de déterminer si la collection n'est pas vide, l'opérateur "vide" est utile car il vérifie également la valeur null.
Joel
Je suis d'accord avec Mark ici. Pourquoi importer plus de cruches dans votre page pour une seule balise? Utilisez la solution de Mark, c'est plus propre.
ResourceReaper
D'accord - vide est plus propre. @Joel devrait publier une réponse complète afin qu'elle puisse être votée et acceptée. Beaucoup d'entre nous ici (moi) sont des programmeurs non-jsp qui copient / collent ensemble des extraits de Google et SO sans trop réfléchir au-delà du premier morceau de code que nous voyons.
Josh
9
L'OP a demandé de vérifier la taille, pas nécessairement de vérifier si elle était vide, ma réponse permet également d'envisager des scénarios plus compliqués avec la bibliothèque complète de balises disponible.
Martlark
les sociétés doivent être un var et non un param, sinon vous devez le définir, par exemple pour ATG - <dsp: getvalueof var = "companies" param = "arrayParam" />
Andriy Boyko
30

Comme suggéré par @Joel et @Mark Chorley dans des commentaires précédents:

${empty companies}

Cela vérifie les listes / collections / tableaux nuls et vides. Il ne vous donne pas la longueur mais il satisfait l'exemple du PO. Si vous pouvez vous en tirer, c'est plus propre que d'importer une bibliothèque de balises et sa syntaxe croustillante gt.

Josh
la source
12

Vous pouvez utiliser comme ça

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

utiliser ${fn:length(companies) > 0}pour vérifier la taille. Cela renvoie un booléen

Supun Dharmarathne
la source