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>

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>

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.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.