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

Sur*_*nut 3 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>
Run Code Online (Sandbox Code Playgroud)

#{worklogService.months}回报List<Integer>.每月一个号码. #{worklogService.getTableForMonth(monthnum)}回报List<List<String>>.

每个表的第一列是相同的.我想根据月份生成所有其他列.结果是12个表只有1列(第一个).这可能是什么问题?以及如何解决?

Bal*_*usC 13

因为此构造失败,UIData类似的组件<p:dataTable>只支持UIColumn孩子们可以在的情况下,<p:dataTable>只能为<p:column><p:columns>.

在您的特定情况下,您有两个选择:

  1. 使用<p:columns>而不是<ui:repeat><p:column>:

    <p:columns value="#{worklogService.getDaysOfMonth(monthnum)}" var="daynum" headerText="#{daynum}">
        #{tabrow.get(daynum)}
    </p:columns> 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用<c:forEach>而不是<ui:repeat>(在此解释):

    <c:forEach items="#{worklogService.getDaysOfMonth(monthnum)}" var="daynum">
        <p:column headerText="#{daynum}">
            <h:outputText value="#{tabrow.get(daynum)}"></h:outputText>
        </p:column> 
    </c:forEach>
    
    Run Code Online (Sandbox Code Playgroud)