Ответ 1
Вывод полностью соответствует ожидаемому и указанному. <ui:repeat>
- это тег времени рендеринга, а не тег времени построения вида, например <c:forEach>
. После создания представления <h:panelGrid>
заканчивается 1 дочерним компонентом (сам <ui:repeat>
), а не с n вложенными компонентами <h:panelGrid>
, как, например, с <c:forEach>
.
<html ... xmlns:c="http://java.sun.com/jsp/jstl/core">
...
<h:panelGrid id="resourcePanel" columns="5" rules="all">
<c:forEach var="res" items="#{resourceUpload.resources}">
<h:panelGrid columns="1" rules="none">
<h:graphicImage
value="/image/resource?id=#{res.idAsString}"
style="width:100px;" />
<h:outputText value="#{res.name}" />
</h:panelGrid>
</c:forEach>
</h:panelGrid>
(это имеет версии Mojarra старше 2.1.18, однако импликация на #{resourceUpload}
: она не может быть охваченной областью видимости bean, она должна быть запрошена в зависимости от проблемы с куриным яйцом в представлении состояния сохранение/восстановление, вам нужно перейти на Mojarra 2.1.18)
Ваш вложенный <h:panelGrid>
делает, кстати, без лишнего смысла. Я бы использовал <h:panelGroup>
здесь.
См. также:
- JSTL в JSF2 Facelets... имеет смысл? - понять "время сборки" и "просмотреть время визуализации" лучше
- динамически создавать столбцы таблицы в JSF - еще один аналогичный вопрос