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