我已經看到了一些關於SO的其他示例,討論了一些奇怪的解決方法,但似乎沒有任何工作,並且它們都在JSF 2之前的版本中解決。因此,可以簡單地輸出地圖的鍵?我試過UI:重複和c:的forEach像下面沒有運氣:在Facelets中輸出一個地圖集合JSF 2
<c:forEach items="${myBean.myMap.keySet}" var="var">
<h:outputText value="#{var}"/>
</c:forEach>
我已經看到了一些關於SO的其他示例,討論了一些奇怪的解決方法,但似乎沒有任何工作,並且它們都在JSF 2之前的版本中解決。因此,可以簡單地輸出地圖的鍵?我試過UI:重複和c:的forEach像下面沒有運氣:在Facelets中輸出一個地圖集合JSF 2
<c:forEach items="${myBean.myMap.keySet}" var="var">
<h:outputText value="#{var}"/>
</c:forEach>
從代碼:
<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>
,因爲它不支持Map
和Set
。它僅支持List
和數組。 <c:forEach>
和<ui:repeat>
之間的區別在於<c:forEach>
在視圖構建期間生成多個JSF組件,<ui:repeat>
創建了一個JSF組件,該組件在視圖渲染時間內多次生成其HTML輸出。
事實證明了正確的語法來輸出映射鍵是:
<ui:repeat value="#{myBean.myMap().keySet().toArray()}" var="var">
<h:outputText value="#{var}"/><br/>
</ui:repeat>
我想通了。我會在8個小時後發佈SO。 – Adam