Отображение списка изображений в табличном формате в формате JSF
Вероятно, это действительно простой вопрос JSF, но я не могу найти простой ответ.
У меня есть Список изображений, и я хочу отобразить их в таблице изображений. Каждое изображение отображается с именем файла. Я использую ui:repeat
тег, как показано ниже. Я не получаю 5 столбцов, как требуется, однако только 1.
<h:panelGrid id="resourcePanel" columns="5" rules="all">
<ui:repeat var="res" value="#{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>
</ui:repeat>
</h:panelGrid>
2 ответа
Вывод полностью соответствует ожидаемому и указанному. <ui:repeat>
является тегом времени рендеринга, а не тегом времени построения представления, как <c:forEach>
, После построения представления, <h:panelGrid>
заканчивается 1 дочерним компонентом (<ui:repeat>
сам), не вложенный <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 - еще один похожий вопрос
Почему вы используете другой <h:panelGrid>
внутри <ui:repeat>
? Вы можете просто использовать div, как это.
Вместо
<h:panelGrid columns="1" rules="none">
использование
<div style="display:inline-block;">
Редактировать:
Я не думаю, что вы можете сделать это с
<ui:repeat>
, использование <c:forEach>
вместо. Сначала вы должны импортировать пространство имен
xmlns:c="http://java.sun.com/jstl/core"
Теперь замените <ui:repeat>
с <c:forEach>
как это.
<c:forEach items="#{accountMastList.resultList}" var="res">