迭代h:datatable中的嵌套List属性

时间:2013-05-16 15:01:39

标签: jsf datatable nested

    <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张照片。它可能吗?任何其他解决方案将不胜感激。

1 个答案:

答案 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