限制ui中的迭代次数:重复

时间:2013-12-02 09:52:02

标签: jsf jsf-2 uirepeat

我们有一个JSF页面,显示一个包含查询结果的表。我们只想显示前3个结果。

如何使用<ui:repeat>完成此操作?

我们无法在业务层执行此操作,因为它不受我们控制。我们需要将结果限制为3。

2 个答案:

答案 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)

您可以执行以下操作:

  1. 注册一个<ui:param>,它将保持显示结果的限制。在您的情况下,它将是3
  2. 使用<ui:repeat>的{​​{1}}属性及其内部varStatus属性,该属性包含当前集合项的索引。
  3. 例如:

    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>