2

这可能是一个非常简单的 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>
4

2 回答 2

2

为什么你<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">
于 2012-11-28T03:54:21.120 回答
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>

(这在早于 2.1.18 的 Mojarra 版本中具有以下含义#{resourceUpload}:它不能是视图范围的 bean,由于视图状态保存/恢复中的鸡蛋问题,它必须是请求范围的;你需要升级到 Mojarra 2.1.18)

顺便说一句,您的嵌套<h:panelGrid>毫无意义。我会在<h:panelGroup>这里使用。

也可以看看:

于 2012-11-28T12:41:28.080 回答