2013-04-08 74 views
1

我移植了一块遗留代码,看起来像这样:如何用ui迭代子列表:repeat?

<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> 

现在我寻找替代<c:if><c:forEach>他们<ui:fragment><ui:repeat>同行。问题是,我需要遍历sel两次:一次从0到12,然后从13到最后。

我还没有找到一种方法来分割列表迭代的foreach标签end属性的方式做它。我真的很想避免在后端分割这个列表,因为这是一个纯视图问题,应该在那里处理。

所以问题是:我可以用我指定的方式替换上述片段吗?有什么选择?

回答

5

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

假设selList在这里,你可以使用

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

并不是说ui:repeatc:forEach并不总是可互换,所以请确保您的使用情况下是有效的。

+0

这么简单,如此有效:-) – mabi 2013-04-08 11:09:30

+2

第一个陈述是不正确的和误导。这根本不是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 – BalusC 2013-04-08 15:06:59

+0

@BalusC的确你是对的。我在印象之下JSF2'需要'EL2.2,但显然这是不正确的。我编辑了这篇文章。谢谢! – 2013-04-09 08:08:02