限制ui中的迭代次数:repeat



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

使用<ui:repeat>如何做到这一点?

我们不能在业务层这样做,因为它不在我们的控制之下。我们需要将结果限制为3。

您可以按照kocko在他的回答中提出的方式进行操作,但在整个列表中迭代只输出三个组件肯定是太过分了。

由于某种原因,<ui:repeat>组件的size属性不允许将EL指定为其值,而是像3一样指定为普通整数,这决定了这种详细方法的必要性。另请参阅Jsf-ui:repeat-size dons';t获取javabean值。

如果您知道只需要3个值,则可以使用size属性:

<ui:repeat var="var" value="#{bean.list}" size="3">
    <h:outputText value="#{var}" />
</ui:repeat>

或者,如果您在EL2.2+上,您可以通过调用List#subList(from, to)方法获得子列表:

<ui:repeat var="var" value="#{bean.list.subList(0, (bean.list.size() gt 3) ? 3 : bean.list.size())}">
    <h:outputText value="#{var}" />
</ui:repeat>

您可以执行以下操作:

  1. 注册一个<ui:param>,它将保持显示结果的限制。在您的情况下,它将是3
  2. 使用<ui:repeat>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>

这样,<ui:repeat>将只渲染3个组件。

注意rendered属性是在JSF 2.1中引入到<ui:fragment>中的。如果您的JSF版本早于2.1,请考虑使用更改<ui:fragment>

<h:panelGroup rendered="#{status.index lt limit}">
    <! -- place your value-holding-component here -->
</h:panelGroup>

相关内容

  • 没有找到相关文章

最新更新