2013-04-08 86 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