2012-12-20 9 views
5

Mam tam mały problem. Kiedy chcę zapełnić DataTable w JSF, muszę najpierw utworzyć model, a następnie użyć go w moim widoku. Podobnie jak w przypadku próbki Primefaces here.Tworzenie i zapełnianie DataTable dynamicznie w JSF2.0

A teraz muszę utworzyć DataTable, która będzie wyświetlać dane pochodzące z usługi sieciowej. Nie wiem, ile kolumn się pojawi, a ja nie znam ich nazwisk ... Czy mógłbyś polecić jakieś mądre rozwiązanie?

PS. Nie wiem też, jak zwracać dane z usługi sieciowej - jest jeszcze do ustalenia.


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

Odpowiedz

7

Zbieranie danych w List<Map<String, Object>> co stanowi właściwość rows. Numer Map reprezentuje kolumny z wpisaną przez nazwę kolumną (jeśli to konieczne, po prostu automatycznie wygenerowane, takie jak column1, column2, column3 itd. Przez "column" + i). Zbierz te nazwy kolumn w oddzielnym List<String>, który reprezentuje właściwość columns. Na koniec pokaż to w następujący sposób: <p:columns>:

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

Świetne .. Dzięki, ale jak zdobyć nagłówek kolumny? Oto moja fasola w EDYCJI pytań. Brakuje tylko nagłówków. – Marshall

+2

Użyj ''. Lub jeśli masz nazwy nagłówków w oddzielnej 'Map ', to coś jak '' – BalusC

+0

Jeszcze raz dziękuję. Pierwsza opcja działa dobrze. Ale po drugie ... Deklaruję takie nagłówki: List > headers; Utwórz getter i seter z publicznym, ale headerText = "# {browserBean.headers [kolumna]}" nie działa:/ – Marshall

Powiązane problemy