如何使用ui重复子列表:重复?

mab*_*abi 1 jsf-2

我正在迁移一段看起来像这样的遗留代码:

<c:forEach items="#{sel}" var="crit" end="12">
  <tr>
    <td class="criteriaName">
      <c:set var="tip" value="#{Factory.makeTooltip(crit.string)}" />

      <c:if test="#{0 != fn:length(tip)}">
        <a:outputPanel layout="block">
          <h:outputText value="#{crit.kriterium}" styleClass="tooltipAvailable"/>
            <rich:tooltip layout="block">
              <h:outputText escape="false" value="#{tip}" />
            </rich:tooltip>
         </a:outputPanel>
       </c:if>

       <c:if test="#{0 == fn:length(tip)}">
         <h:outputText value="#{crit.kriterium}" />
       </c:if>
     </td>
  </tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找替换<c:if><c:forEach>与他们<ui:fragment><ui:repeat>同行.问题是,我需要迭代sel两次:一次从0到12再从13到结束.

我没有找到一种方法来分割列表迭代,就像endforeach标记的属性一样.我真的想避免在后端拆分列表,因为这是一个纯粹的视图问题,应该在那里处理.

所以问题是:我可以按照指定的方式替换上面的片段吗?有哪些替代方案?

Joe*_*ckx 5

如果您使用的是EL 2.2,则可以调用普通的java方法.

假设这sel是一个List,你可以使用

<ui:repeat var="crit" value="#{sel.subList(0,12)}">
Run Code Online (Sandbox Code Playgroud)

不是,ui:repeat并且c:forEach不总是可以互换,所以请确保您的用例有效.

  • 第一个陈述不正确且具有误导性.这根本不是JSF 2.x功能.这是EL 2.2功能.JSF 2.x可以部署到Servlet 2.5/EL 2.1容器,根本不支持此功能.另一方面,JSF 1.x可以部署到支持此功能的Servlet 3.0/EL 2.2容器.另见:http://stackoverflow.com/questions/14382466/jsf-actionlistener-tag-calls-method-which-doesnt-take-an-actionevent-paramete/14382966#14382966 (2认同)