如何显示多个动态数据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。我已经从上面的片段中删除了那些。
我已经在我的 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。我已经从上面的片段中删除了那些。