Отображение списка изображений в табличном формате в формате 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> Вот.

Смотрите также:

Почему вы используете другой <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">
Другие вопросы по тегам