цикл "для" в JSF - PullRequest
8 голосов
/ 10 марта 2011

Мне просто нужно выполнить очень простой for цикл в JSF / ICEFaces, в основном, рендеринг номеров столбцов

Что-то вроде следующего псевдокода

for(int i=0; i<max; i++)
{
   <td>#{i}</td>
}

тег <c:forEach> выполняет итерации по коллекциям, но я не хочу усложнять мой компонент поддержки, возвращая глупую коллекцию целых чисел.

Знаете ли вы более короткий и умный способ?

Спасибо

Ответы [ 5 ]

11 голосов
/ 10 марта 2011
<c:forEach var="i" begin="1" end="#{someBean.max}">
             <td>#{i}</td>      
 </c:forEach>
4 голосов
/ 14 мая 2012

Тег <ui:repeat> - это то, что вы действительно должны использовать.Теги JSTL работают вне жизненного цикла JSF.Кей Хорстман имеет курс JSF, в котором обсуждается этот факт: ui: повтор и обработка данных переменной длины .

Ниже приведено несколько решений, демонстрирующих некоторую гибкость.Вы можете сделать что-то вроде этого:

<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.values}" size="#{max}" >
 <tr><td>#{i}</td></tr>
</ui:repeat>

Максимальное количество строк определяется как <ui:parameter> с именем max.Это не обязательно, но демонстрирует гибкость.В качестве альтернативы вы можете использовать что-то вроде:

<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.rowNumbers(max)}">
 <tr><td>#{i}</td></tr>
</ui:repeat>

Код поддерживающего бина следующий:

@ManagedBean
public class IndexBean {

public List<Integer> getValues() {
    List<Integer> values = new ArrayList<Integer>();
    for (int i = 0; i < 10; i++) {
        values.add(i);
    }
    return values;
}

public List<Integer> rowNumbers(final int max) {
    List<Integer> values = new ArrayList<Integer>();
    for (int i = 0; i < max; i++) {
        values.add(i);
    }
    return values;
}
}
4 голосов
/ 10 марта 2011

Я предлагаю подумать на более высоком уровне абстракции, не с точки зрения рендеринга тегов HTML, а с точки зрения использования компонента, который делает то, что вам нужно.Например, база данных Primefaces поддерживает динамические столбцы , которые должны быть способны заменить вашу итеративную логику на странице.

1 голос
/ 13 сентября 2017

Простой пример с использованием пользовательского повтора

<ul>
    <ui:repeat var="entry" value="${tourBean.tour.highlights}">
        <li class="pb-1">#{entry}</li>
    </ui:repeat>
</ul>
0 голосов
/ 01 октября 2011

с таблицей данных с расширенными гранями вы можете динамически генерировать заголовки столбцов и значения

...