Ui: repeat и h: panelGrid

При использовании чего-то вроде

<h:panelGrid columns="1">
    <ui:repeat var="o" value="#{mybean.list}">
        <h:outputText value="#{o.text}"/>
    </ui:repeat>
</h:panelGrid>

давайте скажем, 10 записей в списке. Я получаю только 1 строку, например: один tr с 1 td, тогда как при использовании c: forEach я получаю 10 (но c: forEach на самом деле злой, он все испортил с помощью ajax)

Я использую mojarra 1.2 - это типичная ошибка Mojarra, которая не существует в реализации MyFaces? Он исчезнет в 2.x релизов Mojarra?

Ответ 1

Вывод полностью соответствует ожидаемому и указанному. <ui:repeat> - это тег времени рендеринга, а не тег времени построения вида, например <c:forEach>. После создания представления <h:panelGrid> заканчивается 1 дочерним компонентом (сам <ui:repeat>), а не с n <h:outputText> компонентами, такими как <c:forEach>.

Вместо этого вам понадобится <h:dataTable>. Он предназначен именно для этой цели.

<h:dataTable var="o" value="#{mybean.list}">
    <h:column>
        <h:outputText value="#{o.text}"/>
    </h:column>
</h:dataTable>

См. также: