Размер коллекции можно получить с помощью fn:length
, а в EL есть основные арифметические операторы.
<ui:composition xmlns:fn="http://java.sun.com/jsp/jstl/core">
...
<ui:param name="size" value="#{fn:length(featuredArticles) / 6}" />
...
<ui:repeat size="#{size}">
...
</ui:composition>
Обновление : что касается округления, которое становится сложным. В старом JSP вы могли использовать для этого JSTL <fmt:formatNumber>
, который может экспортировать в атрибут var
вместо отображения его прямо в представлении.
<fmt:formatNumber var="size" value="${fn:length(featuredArticles) / 6}" pattern="0" />
Но JSTL fmt
недоступен в Facelets.
Хакерским способом было бы разделить дроби, используя fn:substringBefore
.
<ui:param name="size" value="#{fn:substringBefore(fn:length(featuredArticles) / 6, '.')}" />
Но это всегда округляется.
Лучший способ - создать собственную функцию EL. Вы можете найти пример в этом ответе . Для JSF 2.0 вам нужно только заменить устаревший <param-name>facelets.LIBRARIES</param-name>
на <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
. В конце концов вы получите как:
<ui:param name="size" value="#{x:roundUp(fn:length(featuredArticles) / 6)}" />
В качестве совершенно другой альтернативы вы также можете выполнять эту работу в конструкторе, инициаторе или получателе управляемого компонента.