Проверьте размер коллекции с помощью JSTL

234

Как я могу проверить размер коллекции с помощью JSTL?

Что-то вроде:

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

</c:if>
Серхио дель Амо
источник

Ответы:

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

</c:if>

Этот синтаксис работает только в EL 2.2 или новее (Servlet 3.0 / JSP 2.2 или новее). Если вы столкнулись с ошибкой разбора XML, потому что вы используете JSPX или Facelets вместо JSP, используйте gtвместо >.

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

</c:if>

Если вы на самом деле сталкиваетесь с ошибкой синтаксического анализа EL, то вы, вероятно, используете слишком старую версию EL. Вам понадобится fn:length()функция JSTL тогда. Из документации :

length (java.lang.Object) - возвращает количество элементов в коллекции или количество символов в строке.

Поместите это вверху страницы JSP, чтобы разрешить fnпространство имен:

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

Или, если вы используете JSPX или Facelets:

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

И используйте это на своей странице:

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

Итак, чтобы протестировать с длиной коллекции:

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

</c:if>

Кроме того, для этого конкретного случая вы также можете просто использовать emptyоператор EL :

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

</c:if>
Martlark
источник
47
Просто хотел заметить, что если нужно получить размер, чтобы определить, является ли коллекция непустой, то полезен оператор «empty», так как он также проверяет наличие нуля.
Джоэл
Я согласен с Марком здесь. Зачем импортировать больше страниц на вашу страницу для одного тега? Используйте решение Марка, оно чище.
ResourceReaper
Договорились - пусто чище. @Joel следует публиковать как полный ответ, чтобы его могли проголосовать и принять. Многие из нас (я) - не программисты jsp, копируют / вставляют фрагменты из Google и SO, не задумываясь над первым фрагментом кода, который мы видим.
Джош
9
ОП спрашивал о проверке размера, не обязательно о проверке, если он пуст, мой ответ также позволяет рассматривать более сложные сценарии с доступной полной библиотекой тегов.
Martlark
компании должны быть переменной, а не параметром, в противном случае вы должны определить ее, например, для ATG - <dsp: getvalueof var = "companies" param = "arrayParam" />
Андрей Бойко
30

Как предложили @Joel и @Mark Chorley в предыдущих комментариях:

${empty companies}

Это проверяет на нулевые и пустые списки / коллекции / массивы. Это не дает вам длину, но удовлетворяет примеру в ОП. Если вам это сойдет с рук, это просто чище, чем импортировать библиотеку тегов и ее резкий синтаксис gt.

мистифицировать
источник
12

Вы можете использовать как это

${fn:length(numList)}
Брэд Ларсон
источник
-2

используйте, ${fn:length(companies) > 0}чтобы проверить размер. Это возвращает логическое значение

Супун Дхармаратна
источник