rich dataTable不能将迭代变量用于嵌套循环

时间:2013-05-06 08:25:26

标签: java jsf arraylist richfaces richdatatable

我正在使用动态数量的列构建一个丰富的数据表。在我看来,这不是一件大事,但我想在几小时后得到一个答案。 问题是当我想使用数据表中的迭代变量进行嵌套循环时。在嵌套循环中,我尝试为每一行创建相同的动态数量的列。 当我展示一些代码时,可能会变得更加清晰:

<rich:dataTable styleClass="waiDataTable" width="700"
rowClasses="odd,even" value="#{reportingModel.reportingDoiPoolRows}"
var="reportingDoiPoolRow"
rendered="#{not empty reportingModel.reportingDoiPoolRows}">

<!-- Start header of the data-table -->
<f:facet name="header">
    <rich:columnGroup>

        <rich:column rowspan="2">
            <h:outputText value="Pool" />
        </rich:column>

        <c:forEach items="#{reportingModel.headerList}" var="item">
            <rich:column colspan="2">
                <h:outputText value="#{item}" />
            </rich:column>
        </c:forEach>

        <rich:column breakRowBefore="true">
            <h:outputText value="New" />
        </rich:column>
        <rich:column>
            <h:outputText value="Tot" />
        </rich:column>

        <c:forEach begin="1" end="#{reportingModel.headerList.size()-1}">
            <rich:column>
                <h:outputText value="New" />
            </rich:column>
            <rich:column>
                <h:outputText value="Tot" />
            </rich:column>
        </c:forEach>

    </rich:columnGroup>
</f:facet>
<!-- End header of the data-table -->

<!-- Start values of the data-table -->

<rich:column>
    <h:outputText value="#{reportingDoiPoolRow.doiPool.name}"></h:outputText>
</rich:column>

<ui:repeat value="#{reportingDoiPoolRow.amountOfDois}" var="amount">
    <rich:column style="text-align:right;">
        <h:outputText value="#{amount}"/>
    </rich:column>
</ui:repeat>

<!-- Start values of the data-table -->

<f:facet name="footer">
    <rich:columnGroup>
        <rich:column style="text-align:left;">Totals</rich:column>

        <rich:column style="text-align:right;">
            <h:outputText value="12"></h:outputText>
        </rich:column>
        <rich:column style="text-align:right;">
            <h:outputText value="12"></h:outputText>
        </rich:column>

    </rich:columnGroup>
</f:facet>

问题出在以下栏目中:

<rich:column>
    <h:outputText value="#{reportingDoiPoolRow.doiPool.name}"></h:outputText>
</rich:column>

<ui:repeat value="#{reportingDoiPoolRow.amountOfDois}" var="amount">
    <rich:column style="text-align:right;">
        <h:outputText value="#{amount}"/>
    </rich:column>
</ui:repeat>

名称(reportingDoiPoolRow.doiPool.name)渲染得很好,但ui:repeat内的每一列都没有渲染。 似乎我不能将reportingDoiPoolRow变量用于另一次迭代。 我用于表的集合都来自类型ArrayList(长)。 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

我认为<ui:repeat>不起作用,因为<rich:column>不是ui:repeat旨在处理的内容(例如<li>或类似的东西),<a4j:repeat>您应该使用它而不会在那里工作(这与表的构建方式有关)。

<c:forEach>会有点麻烦:

<c:forEach var="index" begin="0" end="#{reportingModel.columns - 1}">
    <rich:column style="text-align:right;">
        <h:outputText value="#{reportingDoiPoolRow.amountOfDois.get(index)}" />
    </rich:column>
</c:forEach>

<c:forEach>无法访问<rich:dataTable>中的属性(嗯,它可以访问rowKeyVar,但这将始终为1)所以您必须直接询问bean对于列大小,<c:forEach>呈现的片段可以访问var