Verifique el tamaño de una colección con JSTL

234

¿Cómo puedo verificar el tamaño de una colección con JSTL?

Algo como:

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

</c:if>
Sergio del Amo
fuente

Respuestas:

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

</c:if>

Esta sintaxis solo funciona en EL 2.2 o posterior (Servlet 3.0 / JSP 2.2 o posterior). Si enfrenta un error de análisis XML porque está utilizando JSPX o Facelets en lugar de JSP, entonces use en gtlugar de >.

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

</c:if>

Si realmente enfrenta un error de análisis EL, entonces probablemente esté usando una versión EL demasiado antigua. Necesitará la fn:length()función JSTL entonces. De la documentación :

length (java.lang.Object) : devuelve el número de elementos en una colección o el número de caracteres en una cadena.

Ponga esto en la parte superior de la página JSP para permitir el fnespacio de nombres:

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

O si está utilizando JSPX o Facelets:

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

Y use así en su página:

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

Entonces, para probar con la longitud de una colección:

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

</c:if>

Alternativamente, para este caso específico, también puede simplemente usar el emptyoperador EL :

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

</c:if>
Martlark
fuente
47
Solo quería señalar que si la necesidad de obtener el tamaño es determinar si la colección no está vacía, entonces el operador "vacío" es útil ya que también comprueba si es nulo.
Joel
Estoy de acuerdo con Mark aquí. ¿Por qué importar más cruft en su página para una etiqueta? Use la solución de Mark, es más limpia.
ResourceReaper
De acuerdo - vacío es más limpio. @Joel debe publicar como respuesta completa para que pueda ser votado y aceptado. Muchos de nosotros aquí (yo) somos programadores no jsp que copiamos / pegamos fragmentos de Google y SO sin pensar mucho más allá del primer código que vemos.
Josh
99
El OP preguntó acerca de verificar el tamaño, no necesariamente sobre verificar si está vacío, mi respuesta también permite que se contemplen escenarios más complicados con la biblioteca de etiquetas completa disponible.
Martlark
las compañías deben ser una var, no un parámetro, de lo contrario debe definirlo, por ejemplo, para ATG - <dsp: getvalueof var = "companies" param = "arrayParam" />
Andriy Boyko
30

Como lo sugirieron @Joel y @Mark Chorley en comentarios anteriores:

${empty companies}

Esto busca listas / colecciones / matrices nulas y vacías. No te da la longitud, pero satisface el ejemplo en el OP. Si puede salirse con la suya, esto es más limpio que importar una biblioteca de etiquetas y su sintaxis crujiente gt.

Josh
fuente
12

Puedes usar así

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

use ${fn:length(companies) > 0}para verificar el tamaño. Esto devuelve un valor booleano.

Supun Dharmarathne
fuente