2012-08-01 47 views
0

我正在使用JSF 2.0的repeat標記遍歷對象列表並顯示其某些屬性。我想使用repeatvarStatus屬性,以便我可以訪問循環索引,最後一個列表項的編號,並確定是否已到達列表的末尾(因此不會顯示間隔符)。我認爲這會工作:無法使用JSF 2.0重複標記的「結束」屬性varStatus

<ui:repeat var="anObject" varStatus="repeatStatus" value="#{objectList}"> 
    <h:panelGroup> 
     <h:outputText value="Item #{repeatStatus.index + 1} of #{repeatStatus.end}" /> 
     <h:outputText value="#{anObject.text}" /> 
    </h:panelGroup> 

    <h:outputText value="&nbsp;" rendered="#{false == repeatStatus.last}" /> 
</ui:repeat> 

但是,它從來沒有顯示任何repeatStatus.endindexlast屬性運行良好。

而不是repeatStatus.end,我嘗試使用objectList.size(),但只爲列表中的第一項工作。

如何顯示列表中項目的數量作爲「y的項目x」文本的一部分?

回答

2

僅當您設置size屬性時纔會使用end

<ui:repeat ... size="#{fn:length(objectList)}"> 

或者,你也可以只直接使用它。

Item #{repeatStatus.index + 1} of #{fn:length(objectList)} 

順便說一下,#{false == repeatStatus.last}的布爾比較是醜陋的。它已經返回一個布爾值;如果你想否定它,寧可使用#{not repeatStatus.last}

+0

這很有道理。但是,在這個項目中,我試圖避免使用JSTL。 根據你的建議,我嘗試了'size =「#{objectList.size()}」',但那沒有效果。 – 2012-08-01 20:28:02

+0

然後創建一個自定義EL功能。然而,我不明白這比僅僅使用現有的JSTL功能更好。也許你已經過度概括了其中的一個,「在JSF中避免使用JSTL」。閱讀這個問題然後:http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense至於'.size()',只有當你的環境使用EL 2.2或JBoss EL時纔有效。 – BalusC 2012-08-01 20:44:57

+0

儘管我還沒有爲我工作,但我已經標記了您的答案。我從來沒有見過你的解決方案不起作用。 :)我是一個Java新手,所以我不知道爲什麼它不工作,但我會弄清楚。我驗證了你對'size'屬性的評論。如果我在那裏放一個數字,'repeatStatus.end'確實顯示這個數字。我開始認爲JSTL沒有工作,但後來我嘗試了'fn:toUpperCase'並且工作正常。我認爲'objectList'的評估是錯誤的。我以前遇到過這個問題,但我認爲我需要提出另一個問題。 – 2012-08-03 19:23:31