我正在建立具有动态列数的丰富数据表。在我看来,这不是一件大事,但是我一直在努力寻求答案。问题是当我想将数据表中的迭代变量用于嵌套循环时。在嵌套循环中,我尝试为每一行创建相同数量的动态列。当我显示一些代码时,它可能会变得更加清晰:
<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变量。我用于表的Collections都来自类型ArrayList(long)。非常感谢您的帮助。
reportingDoiPoolRow.doiPool.name
ui:repeat
ArrayList
我认为<ui:repeat>这<rich:column>是行不通的,因为不是ui:repeat旨在处理的内容(例如a <li>或类似的内容),<a4j:repeat>您应该使用它而不是在那里处理(这与表已建立)。
<ui:repeat>
<rich:column>
<li>
<a4j:repeat>
<c:forEach> 可以工作,但需要一点技巧:
<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。
<rich:dataTable>
rowKeyVar
var