如何显示多个动态数据tableheaders?

How to display multiple dynamic data table headers?

我已经在我的 JSF 页面中成功显示了一个动态数据表。

但是,我需要为月份列添加列 header,如下所示 但它不显示月份列 header

<ul type="none">
    <ui:repeat  value="#{caseStudy.pojoListsForCaseStudyAttendance}"
               var="caseStudyDetails">
        <li>
            <p:dataTable value="#{caseStudyDetails}"
                         var="pojo1"
                         rendered="#{addCampus.campusDetails.campus=='C'}">

                <p:column>
                    <f:facet name="header">
                        <p:outputLabel value="#{pojo1.subjectName}"></p:outputLabel>
                    </f:facet>
                    <p:outputLabel value="#{pojo1.monthValue}"></p:outputLabel>
                </p:column>

                <p:column headerText="#{message['label.msg.student.leave.list.list']}">
                    <p:outputLabel value="#{pojo1.appliedLeavesList}"></p:outputLabel>
                </p:column>
            </p:dataTable>
        </li>
    </ui:repeat>
</ul>

这里有一个根本性的误解。

<p:dataTable value="#{caseStudyDetails}" var="pojo1">
    <p:column>
        <f:facet name="header">#{pojo1.subjectName}</f:facet>
        #{pojo1.monthValue}
    </p:column>
</p:dataTable>    

您基本上是在尝试将 row-based 值显示为列 header。 table 可以有多行。只能有 一个 列 header。您要在 header 列中显示哪一行?你没有在任何地方指定。 table 怎么知道的?在渲染 table 头部时,table 不知道 #{pojo1} 到底是什么,更不用说您要使用的众多头部中的哪一个了。它仅在呈现 table body 的每一行时可用。在 header 列中,只有 #{caseStudyDetails} 或其 parents 可用。

如果每一行在同一列中具有完全相同的 subjectName 值(这表明一个充满重复数据的低效模型,但除此之外),那么您可以像下面这样明确地获取第一项:

<p:dataTable value="#{caseStudyDetails}" var="pojo1">
    <p:column>
        <f:facet name="header">#{caseStudyDetails[0].subjectName}</f:facet>
        #{pojo1.monthValue}
    </p:column>
</p:dataTable>    

但是,如果每一行都有不同的 subjectName,那么您不应将其显示在列 header 的单个位置,而应在每一行中显示它。像这样:

<p:dataTable value="#{caseStudyDetails}" var="pojo1">
    <p:column>
        <strong>#{pojo1.subjectName}</strong><br/>
        #{pojo1.monthValue}
    </p:column>
</p:dataTable>    

与具体问题无关,在所有地方滥用 <p:outputLabel> 并没有让我觉得您正在使用正确的资源来学习 JSF .仔细阅读Purpose of the h:outputLabel and its "for" attribute。我已经从上面的片段中删除了那些。