Come posso controllare la dimensione di una collezione con JSTL?
Qualcosa di simile a:
<c:if test="${companies.size() > 0}">
</c:if>
Come posso controllare la dimensione di una collezione con JSTL?
Qualcosa di simile a:
<c:if test="${companies.size() > 0}">
</c:if>
Risposte:
<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 gt
invece 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 fn
spazio 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' empty
operatore EL :
<c:if test="${not empty companies}">
</c:if>
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
.
Puoi usare così
${fn:length(numList)}
usare ${fn:length(companies) > 0}
per controllare le dimensioni. Questo restituisce un valore booleano