我想生成一个表列表。每月1张桌子。每月每天有1列。这是我正在使用的JSF文章。
<ui:repeat value="#{worklogService.months}" var="monthnum">
<p:dataTable value="#{worklogService.getTableForMonth(monthnum)}" var="tabrow">
<p:column headerText="Name">
<h:outputLabel value="#{tabrow.get(0)}"></h:outputLabel>
</p:column>
<ui:repeat value="#{worklogService.getDaysOfMonth(monthnum)}" var="daynum">
<p:column headerText="#{daynum}">
<h:outputText value="#{tabrow.get(daynum)}"></h:outputText>
</p:column>
</ui:repeat>
</p:dataTable>
</ui:repeat>
#{worklogService.months}
返回List<Integer>
。每月一个号码。
#{worklogService.getTableForMonth(monthnum)}
会返回List<List<String>>
。
每个表的第一列是相同的。我想根据月份生成所有其他列。结果是12个表只有1列(第一个)。这可能是什么问题?以及如何解决?
答案 0 :(得分:10)
此构造失败,因为UIData
组件(例如<p:dataTable>
)仅支持UIColumn
子项,<p:dataTable>
只能<p:column>
或<p:columns>
}。
在您的特定情况下,您有2个选项:
使用<p:columns>
代替<ui:repeat><p:column>
:
<p:columns value="#{worklogService.getDaysOfMonth(monthnum)}" var="daynum" headerText="#{daynum}">
#{tabrow.get(daynum)}
</p:columns>
使用<c:forEach>
代替<ui:repeat>
(explained here):
<c:forEach items="#{worklogService.getDaysOfMonth(monthnum)}" var="daynum">
<p:column headerText="#{daynum}">
<h:outputText value="#{tabrow.get(daynum)}"></h:outputText>
</p:column>
</c:forEach>