2012-12-20 10 views
5

Ho un piccolo problema proprio lì. Quando voglio compilare DataTable in JSF devo prima creare un modello, quindi usarlo nella mia vista. Come su Primefaces campionare here.Creazione e popolamento di un DataTable in modo dinamico in JSF2.0

E ora, devo creare DataTable che visualizzerà i dati, provenienti da webservice. Non so quante colonne ci saranno, e non conosco i loro nomi ... Potresti raccomandare qualche soluzione saggia?

PS. Non so anche come restituire i dati dal webservice - è ancora da determinare.


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

risposta

7

raccogliere i dati in un List<Map<String, Object>> che rappresenta la proprietà rows. Il numero Map rappresenta le colonne, unite da un nome di colonna (se necessario, appena generato automaticamente come column1, column2, column3, ecc. Da "column" + i). Raccogli i nomi di colonna in uno List<String> separato che rappresenta la proprietà columns. Infine mostralo come segue per <p:columns>:

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

ottimo .. Grazie, ma come ottenere l'intestazione della colonna? Ecco il mio bean in EDIT della domanda. Mancano solo le intestazioni. – Marshall

+2

Usa ''. Oppure se hai i nomi delle intestazioni in un 'Map ', quindi qualcosa come '' – BalusC

+0

Grazie ancora. La prima opzione funziona bene. Ma in secondo luogo ... dichiaro le intestazioni in questo modo: Elenco > headers; Crea getter e setter con public, ma headerText = "# {browserBean.headers [column]}" non funziona:/ – Marshall

Problemi correlati