如何使用ui:在数据表中重复以追加列?

时间:2014-09-08 12:18:36

标签: jsf

我想生成一个表列表。每月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列(第一个)。这可能是什么问题?以及如何解决?

1 个答案:

答案 0 :(得分:10)

此构造失败,因为UIData组件(例如<p:dataTable>)仅支持UIColumn子项,<p:dataTable>只能<p:column><p:columns> }。

在您的特定情况下,您有2个选项:

  1. 使用<p:columns>代替<ui:repeat><p:column>

    <p:columns value="#{worklogService.getDaysOfMonth(monthnum)}" var="daynum" headerText="#{daynum}">
        #{tabrow.get(daynum)}
    </p:columns> 
    
  2. 使用<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>