Тег <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;
}
}