2012-12-20 21 views
5

ちょっとした問題があります。 DataTableをJSFに取り込みたいときは、まずモデルを作成してから、自分のビューで使用する必要があります。 Primefacesのサンプルhereのように。JSF2.0でDataTableを動的に作成および設定する

今、私は、Webサービスから来たデータを表示するDataTableを作成する必要があります。私はいくつの列があるのか​​分かりませんし、私はその名前を知らないのです...あなたはいくつかの賢明な解決策をお勧めしますか?

PS。私はウェブサービスからデータを返す方法も知らない。それはまだ決定することである。


EDIT

public Bean() { 
    columns = new ArrayList<String>(); 
    rows = new ArrayList<Map<String, Object>>();   
    populateColumns(columns,4); 

    for(int i = 0 ; i < 6 ; i++) 
    {    
     Map<String,Object> m = new HashMap<String,Object>(); 
     m.clear();   
     for(int j = 0 ; j < 4 ; j++) 
     { 
      m.put("Column" + j, "sth" + j + i); 
     }            
     rows.add(m); 
    }  
} 

private void populateColumns(List<String> list, int size) { 
    for(int i = 0 ; i < size ; i++) 
     list.add("Column" + i); 
} 

答えて

7

rowsプロパティを表すList<Map<String, Object>>でデータを収集します。 Mapは、カラム名(必要に応じてcolumn1column2、など、"column" + iなど)をキーとするカラムを表します。これらの列名は、columnsプロパティを表す別のList<String>に収集します。最後に、<p:columns>によってそれを示す:

<p:dataTable value="#{bean.rows}" var="row"> 
    <p:columns value="#{bean.columns}" var="column"> 
     #{row[column]} 
    </p:columns> 
</p:dataTable> 
+0

素晴らしい..ありがとう、しかし、どのように列見出しを取得するには?質問の編集で私の豆がここにあります。ヘッダーだけがありません。 – Marshall

+2

''を使用してください。あるいは別の 'Map 'にヘッダ名がある場合、 '' – BalusC

+0

のようなものです。最初のオプションは正常に動作します。しかし、2番目...私はそのようなヘッダーを宣言します:List > headers; getterとsetterをpublicで作成しますが、headerText = "#{browserBean.headers [column]}"は機能しません:/ – Marshall

関連する問題