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>

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>

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.



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.