这可能是一个非常简单的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>
答案 0 :(得分: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">
答案 1 :(得分:2)
输出完全符合预期和指定。 <ui:repeat>
是渲染时标记,而不是<c:forEach>
之类的视图构建时标记。构建视图后,<h:panelGrid>
最终会有1个子组件(<ui:repeat>
本身),而不是 n 嵌套<h:panelGrid>
组件,就像您使用{ {1}}。
<c:forEach>
(这在早于2.1.18的Mojarra版本中有<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>
的含义:它不能是视图范围的bean,它必须是由于鸡蛋问题而请求作用域在视图状态保存/恢复;您需要升级到Mojarra 2.1.18)
你的嵌套#{resourceUpload}
使得没有任何意义。我在这里使用了<h:panelGrid>
。