3

動的な量の列を持つ豊富なデータテーブルを構築しています。大したことではないように思えますが、何時間も答えを得ようとしています。問題は、ネストされたループにデータテーブルの反復変数を使用したい場合です。ネストされたループでは、すべての行に対して同じ動的数の列を作成しようとします。いくつかのコードを表示すると、おそらくより明確になります。

<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(ロング) のものです。ご助力ありがとうございます。

4

1 に答える 1

3

ui:repeat が処理するように設計されているものではない<ui:repeat>ため(たとえば、aまたはそのようなもの)、代わりに使用する必要があるものはそこでも機能しないため、機能しないと思います (そして、それはテーブルが作成されます)。<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 になります)。そのため、Bean に列のサイズを直接問い合わせる必要がありますが、によってレンダリングされたピース<c:forEach>var.

于 2013-05-06T10:03:08.323 に答える