2011-11-17 61 views
11

我已經看到了一些關於SO的其他示例,討論了一些奇怪的解決方法,但似乎沒有任何工作,並且它們都在JSF 2之前的版本中解決。因此,可以簡單地輸出地圖的鍵?我試過UI:重複和c:的forEach像下面沒有運氣:在Facelets中輸出一個地圖集合JSF 2

<c:forEach items="${myBean.myMap.keySet}" var="var"> 
    <h:outputText value="#{var}"/> 
</c:forEach> 
+0

我想通了。我會在8個小時後發佈SO。 – Adam

回答

14

從代碼:

<c:forEach items="${myBean.myMap.keySet}" var="var"> 

這是行不通的。這需要the Map interface上的getKeySet()方法,但沒有。

如果環境支持EL 2.2(的Servlet 3.0容器如Tomcat 7,Glassfish的3等),那麼你應該調用keySet()方法直接與其說這是作爲一個屬性的:

<c:forEach items="#{myBean.myMap.keySet()}" var="key"> 
    <h:outputText value="#{key}"/> 
</c:forEach> 

或者如果您的環境不支持EL 2.2還沒有,那麼你應該重複這給每個迭代這反過來又一個getKey() method一個Map.Entry instance地圖本身直接過來的,所以這應該做的一樣好:

<c:forEach items="#{myBean.myMap}" var="entry"> 
    <h:outputText value="#{entry.key}"/> 
</c:forEach> 

以上均不適用於<ui:repeat>,因爲它不支持MapSet。它僅支持List和數組。 <c:forEach><ui:repeat>之間的區別在於<c:forEach>在視圖構建期間生成多個JSF組件,<ui:repeat>創建了一個JSF組件,該組件在視圖渲染時間內多次生成其HTML輸出。

+0

我更喜歡你的答案。更多詳情。我記得你!你是個癮君子。你搖滾男人! – Adam

+1

不客氣。 – BalusC

9

事實證明了正確的語法來輸出映射鍵是:

<ui:repeat value="#{myBean.myMap().keySet().toArray()}" var="var"> 
    <h:outputText value="#{var}"/><br/> 
</ui:repeat>