如何显示多个动态数据表头?

时间:2015-09-28 06:11:25

标签: jsf dynamic jsf-2 primefaces datatable

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

但是,我需要为month列添加列标题,如下所示 但它没有显示月份列标题

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

Actual Output that I'm getting

1 个答案:

答案 0 :(得分:2)

这里存在一个根本性的误解。

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

您基本上尝试将基于行的值显示为列标题。一个表可以有多行。只能有一个列标题。你究竟想在列标题中显示哪一行?你无处指定。桌子应该怎么知道?在渲染表头时,表格不知道究竟是什么#{pojo1},更不用说你准确使用哪一个了。它仅在渲染表体的每一行时可用。在列标题内,只有#{caseStudyDetails}或其父项可用。

如果每一行在同一列中具有完全相同的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,那么您不应该在列标题中的单个位置显示它,但是您应该在每一行中显示该行。像这样:

<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。我已经删除了上述代码段中的内容。