Verificar um tamanho de coleção com JSTL


234

Como posso verificar o tamanho de uma coleção com JSTL?

Algo como:

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

</c:if>

Respostas:


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

</c:if>

Essa sintaxe funciona apenas no EL 2.2 ou mais recente (Servlet 3.0 / JSP 2.2 ou mais recente). Se você estiver enfrentando um erro de análise de XML porque está usando JSPX ou Facelets em vez de JSP, use em gtvez de >.

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

</c:if>

Se você está realmente enfrentando um erro de análise de EL, provavelmente está usando uma versão EL muito antiga. Você precisará da fn:length()função JSTL então. A partir da documentação :

length (java.lang.Object) - Retorna o número de itens em uma coleção ou o número de caracteres em uma sequência.

Coloque isso na parte superior da página JSP para permitir o fnespaço para nome:

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

Ou se você estiver usando JSPX ou Facelets:

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

E use assim em sua página:

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

Então, para testar com o comprimento de uma coleção:

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

</c:if>

Como alternativa, para este caso específico, você também pode simplesmente usar o emptyoperador EL :

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

</c:if>

47
Só queria observar que, se a necessidade de obter o tamanho é determinar se a coleção está vazia, o operador "vazio" é útil, pois também verifica se há nulo.
Joel

Eu concordo com o Mark aqui. Por que importar mais cruft em sua página para uma tag? Use a solução de Mark, é mais limpa.
ResourceReaper

Concordou - vazio é mais limpo. O @Joel deve postar como uma resposta completa para que possa ser votado e aceito. Muitos de nós aqui (eu) somos programadores não-jsp, copiando / colando trechos do Google e do SO sem pensar muito além do primeiro trecho de código que vemos.
Josh

9
O OP perguntou sobre a verificação do tamanho, não necessariamente sobre a verificação de vazio, minha resposta também permite que cenários mais complicados sejam contemplados com a biblioteca de tags completa disponível.
Martlark

as empresas devem ser uma var não um param, caso contrário, você tem que definir, por exemplo, para ATG - <dsp: var getvalueof = "companhias" param = "arrayParam" />
Andriy Boyko

30

Conforme sugerido por @Joel e @Mark Chorley nos comentários anteriores:

${empty companies}

Isso verifica se há listas / coleções / matrizes nulas e vazias. Ele não fornece o comprimento necessário, mas satisfaz o exemplo no OP. Se você conseguir se safar, é mais limpo do que importar uma biblioteca de tags e sua sintaxe difícil gt.



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.