2011-12-03 12 views
5

JSFを使用してFaceletsにデータを表示する際に問題があります。私はハッシュマップのリストを持っている:ui:repeatでハッシュマップのリストを表示するには?

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

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

データベースから次のように私はこれを取得:

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); 
} 

だから、私の問題は、XHTML内のすべてのマップの情報を表示する方法です。私はui:repeatを使用しようとしますが、それは間違っていますので、私は助けが必要です。私は名前と家族のためのゲッターを持っている必要がありますが、どうすればいいですか?

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

私はあなたの問題を理解してそれを解決するのに役立ちます。前もって感謝します!

答えて

3

#{persons}は、Map<String, String>です。通常のJavabeansと同じ方法でキーを使用してマップ値にアクセスできます。したがって#{person.name}map.get("name")を返します。

だから、これは実行する必要があります。

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

(それは基本的に一人だけを表しているので、私は唯一、personpersonsに改称)

を以下の方法が有効で、それも仕方ですピリオドを含む地図キーがある場合は、実際には唯一の方法です:

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

通常の練習は、しかし、それは実際にエンティティを表す場合は代わりにMapのJavaBeanのクラスを作成することです(あなたが見る、あなたが接近していた、あなただけの閉じ括弧を忘れてしまいました)。

public class Person { 

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

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

そして、これをList<Person>として表示します。

+0

本当にありがとう、私はそれを修正しました! :) –

+0

ようこそ。 – BalusC