2012-12-20 42 views
5

Tôi có một vấn đề nhỏ ngay tại đó. Khi tôi muốn cư trú DataTable trong JSF, tôi phải tạo ra một mô hình đầu tiên, sau đó sử dụng nó trong quan điểm của tôi. Giống như trên Primefaces mẫu here.Tạo và điền một DataTable động trong JSF2.0

Và bây giờ, tôi phải tạo DataTable sẽ hiển thị dữ liệu, đến từ webservice. Tôi không biết có bao nhiêu cột sẽ có, và tôi không biết tên của họ ... Bạn có thể giới thiệu một số giải pháp khôn ngoan?

PS. Tôi cũng không biết cách trả về dữ liệu từ webservice - nó vẫn còn để xác định.


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

Trả lời

7

Thu thập các dữ liệu trong một List<Map<String, Object>> đại diện cho rows tài sản. Map đại diện cho các cột, được khóa bằng tên cột (nếu cần, chỉ được tạo tự động như column1, column2, column3, v.v ... "column" + i). Thu thập các tên cột đó trong một số riêng biệt List<String> đại diện cho thuộc tính columns. Cuối cùng hiển thị nó như sau bởi <p:columns>:

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

tuyệt vời .. Cảm ơn, nhưng làm cách nào để lấy tiêu đề cột? Đây là đậu của tôi trong EDIT của câu hỏi. Chỉ tiêu đề bị thiếu. – Marshall

+2

Sử dụng ''. Hoặc nếu bạn có tên tiêu đề trong một 'Bản đồ ' riêng biệt, sau đó một cái gì đó như '' – BalusC

+0

Cảm ơn bạn lần nữa. Tùy chọn đầu tiên hoạt động tốt. Nhưng thứ hai ... Tôi khai báo tiêu đề như thế: Liệt kê các tiêu đề >; Tạo getter và setter với public, nhưng headerText = "# {browserBean.headers [column]}" không hoạt động:/ – Marshall

Các vấn đề liên quan