2011-11-17 18 views
11

Ho visto un paio di altri esempi su SO discutendo alcuni soluzioni alternative, ma nessuno sembra funzionare e sono stati tutti indirizzati alle versioni precedenti a JSF 2. Quindi, è possibile emettere semplicemente l'output chiavi di una mappa? Ho provato ui: repeat e c: forEach come qui di seguito senza fortuna:Emissione di una raccolta di mappe in facelets JSF 2

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

ho capito. Pubblicherò tra 8 ore quando SO mi consente. – Adam

risposta

14

dal codice:

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

Questo non è andare a lavorare. Ciò richiede un metodo getKeySet() su the Map interface, ma non ce n'è.

Se l'ambiente supporta EL 2.2 (Servlet 3.0 contenitori, come Tomcat 7, Glassfish 3, ecc), allora si dovrebbe richiamare il metodo keySet()direttamente invece di chiamare come una proprietà:

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

Or se l'ambiente non supporta EL 2.2 ancora, allora si dovrebbe iterare la mappa stessa direttamente che dà un Map.Entry instance su ogni iterazione, che a sua volta ha un getKey() method, quindi questo dovrebbe fare così:

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

Nessuno dei precedenti funziona con <ui:repeat> in quanto non supporta MapSet. Supporta List e solo l'array. La differenza tra <c:forEach> e <ui:repeat> consiste nel fatto che lo <c:forEach> genera più componenti JSF durante il tempo di creazione della vista e che lo <ui:repeat> crea un singolo componente JSF che genera l'output HTML più volte durante il tempo di rendering della vista.

+0

Mi piace la tua risposta meglio. Più dettaglio. Mi ricordo di te! Sei un drogato di risposte. Sei un uomo rock! – Adam

+1

Prego. – BalusC

9

Si scopre la sintassi corretta per chiavi mappa di output è:

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