Controlla le dimensioni di una raccolta con JSTL


234

Come posso controllare la dimensione di una collezione con JSTL?

Qualcosa di simile a:

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

</c:if>

Risposte:


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

</c:if>

Questa sintassi funziona solo in EL 2.2 o versioni successive (Servlet 3.0 / JSP 2.2 o versioni successive). Se stai riscontrando un errore di analisi XML perché stai usando JSPX o Facelets invece di JSP, allora usa gtinvece di >.

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

</c:if>

Se stai effettivamente riscontrando un errore di analisi EL, probabilmente stai utilizzando una versione EL troppo vecchia. Avrai quindi bisogno della fn:length()funzione JSTL . Dalla documentazione :

lunghezza (java.lang.Object) - Restituisce il numero di elementi in una raccolta o il numero di caratteri in una stringa.

Mettilo nella parte superiore della pagina JSP per consentire lo fnspazio dei nomi:

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

O se stai usando JSPX o Facelets:

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

E usa così nella tua pagina:

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

Quindi per testare con la lunghezza di una raccolta:

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

</c:if>

In alternativa, per questo caso specifico puoi anche semplicemente usare l' emptyoperatore EL :

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

</c:if>

47
Volevo solo notare che se la necessità di ottenere le dimensioni è determinare se la raccolta non è vuota, l'operatore "vuoto" è utile poiché verifica anche la presenza di null.
Gioele,

Sono d'accordo con Mark qui. Perché importare più cruft nella tua pagina per un tag? Usa la soluzione di Mark, è più pulita.
ResourceReaper

D'accordo - vuoto è più pulito. @Joel dovrebbe pubblicare una risposta completa in modo che possa essere votata e accettata. Molti di noi qui (me) sono programmatori non jsp che copiano / incollano frammenti di Google e SO senza pensarci molto oltre il primo pezzo di codice che vediamo.
Josh,

9
L'OP ha chiesto di verificare la dimensione, non necessariamente di verificare se è vuota, la mia risposta consente anche di contemplare scenari più complicati con l'intera libreria di tag disponibile.
Martlark,

le aziende devono essere un var non un parametro, altrimenti è necessario definirlo, ad esempio per ATG - <dsp: getvalueof var = "companies" param = "arrayParam" />
Andriy Boyko

30

Come suggerito da @Joel e @Mark Chorley nei commenti precedenti:

${empty companies}

Questo controlla liste / collezioni / matrici nulle e vuote. Non ti dà la lunghezza ma soddisfa l'esempio nell'OP. Se riesci a cavartela, questo è solo più pulito dell'importazione di una libreria di tag e della sua sintassi crosta gt.



-2

usare ${fn:length(companies) > 0}per controllare le dimensioni. Questo restituisce un valore booleano

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.