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

fly*_*ire 4 jsf jsf-2 uirepeat

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

如何使用<ui:repeat>

我们不能在业务层中执行此操作,因为它不在我们的控制之下.我们需要将结果限制为3.

sku*_*sel 8

你可以按照kocko在他的回答中提出的方式,但是在整个列表中迭代只输出三个组件肯定是过分的.

这种冗长方法的必要性取决于组件的size属性<ui:repeat>由于某种原因不允许将EL指定为其值而是指定普通整数的事实3.另请参见Jsf ui:repeat size不会获得java bean值.

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

<ui:repeat var="var" value="#{bean.list}" size="3">
    <h:outputText value="#{var}" />
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

或者,如果你在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>
Run Code Online (Sandbox Code Playgroud)


Kon*_*kov 2

您可以执行以下操作:

  1. 注册一个<ui:param>它将保存显示结果的限制。在你的情况下它将是3
  2. 使用<ui:repeat>svarStatus属性及其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>
Run Code Online (Sandbox Code Playgroud)

这样,您将只有 3 个由<ui:repeat>.

请注意,该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>
Run Code Online (Sandbox Code Playgroud)