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>
Sergio del Amo
fonte

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>
Martlark
fonte
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.

Josh
fonte
12

Você pode usar assim

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

use ${fn:length(companies) > 0}para verificar o tamanho. Isso retorna um valor booleano

Supun Dharmarathne
fonte