JSF 2 ui:repeat:对div中的每n个项进行分组

Dis*_*tum 6 java jsf jsf-2 uirepeat

鉴于我想要在这样的页面上安排的集合:

<!-- Group 0 -->
<div style="float:left;">
    <div><!-- Item 0 --></div>
    <div><!-- Item 1 --></div>

    <!-- ... -->

    <div><! -- Item n - 1 --></div>
</div>
<!-- Group 1 -->
<div style="float:left;">
    <div><!-- Item n     --></div>
    <div><!-- Item n + 1 --></div>

    <!-- ... -->

    <div><! -- Item 2n - 1 --></div>
</div>

<!-- ... -->

<!-- Group g -->
    <div><!-- Item gn     --></div>
    <div><!-- Item gn + 1 --></div>

    <!-- ... -->

    <div><! -- Item (g + 1)n - 1 --></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我是否可以使用某种技巧在ui中执行此操作:重复或通过其他技术,最好不要创建自定义组件?

Bal*_*usC 8

您可以按varStatus属性检查当前循环,并</div><div style="float: left;">在必要时打印中介.

例如每3件物品:

<div style="float: left;">
    <ui:repeat value="#{bean.list}" var="item" varStatus="loop">
        <h:outputText value="&lt;/div&gt;&lt;div style='float: left;'&gt;" escape="false" rendered="#{not loop.first and loop.index % 3 == 0}" />
        <div>#{item}</div>
    </ui:repeat>
</div>
Run Code Online (Sandbox Code Playgroud)

请注意,不可能将其作为纯HTML包含在内部<h:panelGroup>,因为它会导致XML格式不正确,因此将<h:outputText escape="false">它们作为XML实体.


根据评论更新,这是另一种方法,<div>只有一次定义,可能不那么令人困惑:

<ui:repeat value="#{bean.list}" var="item" varStatus="loop">
    <h:outputText value="&lt;div style='float: left;'&gt;" escape="false" rendered="#{loop.index % 3 == 0}" />
    <div>#{item}</div>
    <h:outputText value="&lt;/div&gt;" escape="false" rendered="#{loop.last or (loop.index + 1) % 3 == 0}" />
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)