2011-12-03 2 views
5

Ho un problema con JSF per visualizzare alcuni dati in Facelets. Ho elenco di HashMaps:Come visualizzare un elenco di hashmap in ui: ripetere?

List<Map<String, String>> persons = new LinkedList<Map<String,String>>(); 

public List getPersons() { 
    return this.persons; 
} 

ottengo questo come risulta dal database:

while(rs.next()) { 
    Map<String,String> result = new HashMap<String,String>(); 
    result.put("name", rs.getString(1)); 
    result.put("category", rs.getString(2)); 
    this.persons.add(result); 
} 

Quindi, il mio problema è come visualizzare informazioni per ogni mappa in XHTML. Provo ad usare ui:repeat ma è sbagliato quindi ho bisogno di aiuto. Devo avere getter per nome e famiglia, ma come dovrei aggiungerlo?

<ui:repeat value="#{class.persons}" var="persons"> 
    <h:outputText value="#{persons['name'}"/> 
    <h:outputText value="#{persons['family'}"/>      
</ui:repeat> 

Spero che tu capisca il mio problema e mi aiuterà a risolverlo. Grazie in anticipo!

risposta

3

Il #{persons} è quindi un Map<String, String>. Puoi accedere ai valori della mappa con le chiavi allo stesso modo dei normali Javabeans. Quindi #{person.name} restituirà map.get("name").

Quindi, questo dovrebbe fare:

<ui:repeat value="#{class.persons}" var="person"> 
    <h:outputText value="#{person.name}"/> 
    <h:outputText value="#{person.family}"/> 
</ui:repeat> 

(ho rinominato solo persons a person, perché rappresenta in sostanza una sola persona)

modo seguente è tra l'altro anche valida e sarebbe in realtà l'unico modo se si dispone di una chiave mappa che conteneva periodi:

<ui:repeat value="#{class.persons}" var="persons"> 
    <h:outputText value="#{persons['name']}"/> 
    <h:outputText value="#{persons['family']}"/>      
</ui:repeat> 

(vedi, tu eri vicino, ti sei dimenticato solo la parentesi graffa di chiusura)

La pratica normale, tuttavia, è quello di creare una classe Javabean invece di una Map se rappresenta in realtà un'entità.

public class Person { 

    private String name; 
    private String family; 
    // ... 

    // Add/generate getters/setters and other boilerplate. 
} 

E alimentarlo come List<Person> alla vista.

+0

Davvero grazie, l'ho risolto! :) –

+0

Prego. – BalusC