JSF: логика на основе индекса итерации - PullRequest
1 голос
/ 25 октября 2010

Прошу прощения за титул, это лучшее, что мой ограниченный мозг может придумать так поздно.

Итак, у меня есть список строк, что-то вроде [abc, def, ghi].

Вопрос: в JSF как итерировать список и создать строку, которая выглядит какэто "abc, def, ghi" (обратите внимание на запятые)?

Для тех, у кого есть желание сказать мне, что мне лучше использовать метод Java для конкатенации строки, послушайте это: каждый членсписок должен быть представлен как отдельная команда link.

Если обычный JSF, он будет выглядеть так:

<h:commandLink>abc</h:commandLink>, <h:commandLink>def</h:commandLink>, <h:commandLink>ghi</h:commandLink>

1 Ответ

8 голосов
/ 25 октября 2010

Предполагая, что #{bean.items} возвращает List<String> или String[], в JSF 1.x вы можете использовать JSTL c:forEach с varStatus. Он дает вам указатель на LoopTagStatus, который имеет метод isLast().

<c:forEach items="#{bean.items}" var="item" varStatus="loop">
    <h:commandLink value="#{item}" /><c:if test="#{!loop.last}">, </c:if>
</c:forEach>

В Facelets, поставляемой с JSF 2.x, такая же функциональность доступна ui:repeat.

<ui:repeat value="#{bean.items}" var="item" varStatus="loop">
    <h:commandLink value="#{item}" />#{!loop.last ? ', ' : ''}
</ui:repeat>
...