我们有一个JSF页面,显示一个包含查询结果的表。我们只想显示前3个结果。
如何使用<ui:repeat>
完成此操作?
我们无法在业务层执行此操作,因为它不受我们控制。我们需要将结果限制为3。
答案 0 :(得分:8)
你可以按照kocko在答案中提出的方式,但是在整个列表中迭代只输出三个组件肯定是过分的。
这种冗长方法的必要性取决于<ui:repeat>
组件的size
属性由于某种原因不允许将EL指定为其值,而是指定{{1}这样的普通整数}。另请参阅Jsf ui:repeat size doesn't gets java bean value。
如果您知道只需要3个值,则可以使用3
属性:
size
或者,如果您使用EL2.2 +,则可以通过调用List#subList(from, to)
方法获取子列表:
<ui:repeat var="var" value="#{bean.list}" size="3">
<h:outputText value="#{var}" />
</ui:repeat>
答案 1 :(得分:2)
您可以执行以下操作:
<ui:param>
,它将保持显示结果的限制。在您的情况下,它将是3
。<ui:repeat>
的{{1}}属性及其内部varStatus
属性,该属性包含当前集合项的索引。例如:
index
这样,<ui:param name="limit" value="3"/>
<ui:repeat var="item" value="#{managedBean.list}" varStatus="status">
<ui:fragment rendered="#{status.index lt limit}">
<! -- place your value-holding-component here -->
</ui:fragment>
</ui:repeat>
只会呈现3个组件。
注意,<ui:repeat>
属性已引入JSF 2.1中的rendered
。如果您的JSF版本早于2.1,请考虑使用
<ui:fragment>
<ui:fragment>