<h:dataTable value="#{SearchingBeans.list}" var="entry">
<h:column>
<f:facet name="header">
<h:outputLabel>Photo</h:outputLabel>
</f:facet>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel>Pseudo</h:outputLabel>
</f:facet>
<h:outputLabel value="#{entry.pseudo}"></h:outputLabel>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel>Description</h:outputLabel>
</f:facet>
<h:outputLabel value="#{entry.description}"></h:outputLabel>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel>Photo</h:outputLabel>
</f:facet>
<h:outputLabel value="#{entry.photo[0].path}"></h:outputLabel> <-- this a List
</h:column>
</h:dataTable>
我有一个实体成员他的一个属性是带有get / set的List照片 该属性填充 我不知道如何在jsf中获取该值我只想要每个成员的第一张图片,因为他们有2-3张照片。它可能吗?任何其他解决方案将不胜感激。
答案 0 :(得分:7)
只需使用<ui:repeat>
或<h:dataTable>
常规方法迭代它。将多个迭代组件嵌套在一起是完全有效的。如果是<h:dataTable>
,您只需要确保将嵌套的迭代组件放在<h:column>
中。
E.g。
<h:dataTable value="#{bean.entities}" var="entity">
<h:column>
#{entity.property}
</h:column>
<h:column>
<ui:repeat value="#{entity.subentities}" var="subentity">
#{subentity.property}
</ui:repeat>
</h:column>
</h:dataTable>
或
<h:dataTable value="#{bean.entities}" var="entity">
<h:column>
#{entity.property}
</h:column>
<h:column>
<h:dataTable value="#{entity.subentities}" var="subentity">
<h:column>
#{subentity.property}
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
在使用较旧版本的Mojarra时,嵌套多个<ui:repeat>
组件并在其中使用<f:ajax>
时,您可能只会遇到问题。
只有JSTL <c:forEach>
嵌套在JSF迭代组件中时才会起作用,原因如下JSTL in JSF2 Facelets... makes sense?
无关,请不要滥用<h:outputLabel>
进行纯文本演示。它会生成一个HTML <label>
元素,该元素的目标是label an input element for
属性。但是,你在代码中没有这样做。您应该使用<h:outputText>
代替。顺便说一句,我最近在初学者的代码中经常看到这一点。必须有一个坏的教程或资源,这种方式滥用<h:outputLabel>
而不是<h:outputText>
甚至是模板文本中的普通EL。您使用的是哪个教程/资源?然后我可以联系作者关于这种严重的错误指导。另请参阅Purpose of the h:outputLabel and its "for" attribute