是否可以在Richfaces 3.3中的forEach
组件中使用subTable
循环?我需要渲染动态数量的列,但没有成功。
示例:
<rich:dataTable
cellpadding="0" cellspacing="0"
width="700" border="1" var="serviceCharge"
value="#{group.serviceCharges}">
<rich:column colspan="3">
<h:outputText value="#{group.name},#{serviceCharge.code}" />
</rich:column>
<rich:subTable var="priceType" value="#{serviceCharge.priceTypes}">
<rich:column colspan="#{group.priceLevels.size}">
<b><h:outputText value="#{priceType.name}" /></b>
</rich:column>
<rich:subTable var="priceLevelItem" value="#{priceType.priceLevels}">
<rich:column colspan="3">
<h:outputText value="Qty" />
</rich:column>
<c:forEach items="#{priceType.priceLevels}" var="priceLevelItem">
<rich:column colspan="3">
<h:outputText value="#{priceLevelItem.id},#{priceLevelItem.qty}" />
</rich:column>
</c:forEach>
</rich:subTable>
<rich:subTable var="priceLevelItem" value="#{priceType.priceLevels}">
<rich:column colspan="3">
<h:outputText value="Amount" />
</rich:column>
<rich:column colspan="3">
<h:outputText value="#{priceLevelItem.id},#{priceLevelItem.amount}" />
</rich:column>
</rich:subTable>
</rich:subTable>
</rich:dataTable>
由于
答案 0 :(得分:2)
是的,你可以。
您可以使用以下代码来定义列列表:
<ui:param name="fields" value="colname1, colname2, colname3"/>
在dataTable
:
<rich:dataTable binding="#{backingBean.table}"
value="#{backingBean.list}" var="row">
<ui:insert name="extraColumnsFirst"></ui:insert>
<f:facet name="header">
<rich:columnGroup>
<ui:insert name="extraColumnsHeaderFirst"/>
<c:forEach items="${fn:split(fields, ',')}"
var="fieldName" varStatus="status">
<rich:column>
<h:outputText value="${fieldName}" />
</rich:column>
</c:forEach>
</rich:columnGroup>
</f:facet>
<c:forEach items="${fn:split(fields, ',')}"
var="fieldName" varStatus="status">
<rich:columnid="column_${fieldName}_${status.index}">
<f:facet name="header"></f:facet>
<h:outputText id="${fieldName}_${status.index}"
value="${row[fieldName]}">
</h:outputText>
</rich:column>
</c:forEach>
<ui:insert name="extraColumnsLast">
</ui:insert>
<f:facet name="footer">
<rich:datascroller id="ds" renderIfSinglePage="false">
</rich:datascroller>
</f:facet>
</rich:dataTable>
答案 1 :(得分:2)
是的,c:forEach
可用于生成动态列数(适用于rich:dataTable
和rich:subTable
)。
在您的示例中,它不起作用,因为您尝试引用未定义的变量priceType
(c:forEach
是TagHandler
,因此它正在尝试评估priveType
在构建树时; rich:dataTable
是Component
,它仅在渲染响应中定义var priveType
。
有关此事的更多信息,请阅读以下文章:TagHandler
vs Component
。