rich dataTable не может использовать итеративную переменную для вложенного цикла

Я строю богатый набор данных с динамическим количеством столбцов. Мне кажется, что это не так уж и важно, но я пытаюсь получить ответ часами. Проблема в том, когда я хочу использовать переменную итерации из таблицы данных для вложенного цикла. Во вложенном цикле я пытаюсь создать для каждой строки одинаковое динамическое количество столбцов. Вероятно, это станет более понятным, когда я покажу некоторый код:

<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 не отображается Кажется, что я не могу использовать переменную reportDoiPoolRow для другой итерации. Коллекции, которые я использую для таблицы, относятся к типу ArrayList (долго). Большое спасибо за Вашу помощь.

1 ответ

Решение

Я думаю <ui:repeat> не работает, потому что <rich:column> это не то, что пользовательский интерфейс: повтор предназначен для решения (например, <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), поэтому вам придется напрямую спрашивать боб о размере столбца, но о части, представленной <c:forEach> будет иметь доступ к var,

Другие вопросы по тегам