2010-09-29 27 views
6

Tôi có một AjaxFallbackDefaultDataTable chứa một hàng cho mỗi kết quả thử nghiệm. Một kết quả thử nghiệm có thể có một lưu ý gắn liền với nó, mà cần phải được hiển thị nổi bật bên dưới kết quả kiểm tra, hy vọng đưa ra một bảng tương tự như sau:Cách chèn 'các hàng phụ' vào một Bảng dữ liệu Wicket

| Test | Result | Appraisal | 
|------|--------|-----------| 
| 1 | 20.0 | PASS | 
| 2 | 1.50 | FAIL | 
| Note: This is an epic fail| 
| 3 | 19.4 | PASS | 
| 4 | 14.9 | PASS | 

Có cách nào để đạt được chèn hàng này (tốt nhất với cột spanning) bằng cách sử dụng cấu trúc Wicket DataTable. Khi tôi đào sâu vào nguồn, tôi có thể tìm thấy các trình kết xuất Item nhưng không có gì liên quan đến một hàng.

Hiện nay tôi có như sau:

// Create the sortable data provider. 
SortableDataProvider<TestResult> provider = new SortableDataProvider<TestResult>() { 
    //... hibernate pagination code ... 
}; 

List<IColumn> columns = new ArrayList<IColumn>(); 
columns.add(new TextFilteredPropertyColumn(new Model<String>("Test"), "test", "test")); 
columns.add(new TextFilteredPropertyColumn(new Model<String>("Result"), "result", "result")); 
columns.add(new TextFilteredPropertyColumn(new Model<String>("Appraisal"), "appraisal", "appraisal")); 

// Create a new AJAX table using the sortable, filtered data provider. 
final AjaxFallbackDefaultDataTable dataTable = new AjaxFallbackDefaultDataTable("testResultTable", columns.toArray(new IColumn[0]), provider, 20);// 20 = number of rows per page 

Trả lời

10

Tôi không nghĩ rằng có một cách sạch để làm điều đó, bạn sẽ phải hack HTML kết quả.

Tôi muốn đính kèm một hành vi tùy chỉnh để các hàng mà tạo ra mã HTML cần thiết tự động, một cái gì đó như thế này:

new AjaxFallbackDefaultDataTable<MyCustomObject>(
    id, columns, dataProvider, rowsPerPage){ 

    @Override 
    protected Item<MyCustomObject> newRowItem(String id, 
     int index, 
     final IModel<MyCustomObject> model){ 
     Item<MyCustomObject> item = super.newRowItem(id, index, model); 
     item.add(new AbstractBehavior(){ 

      private static final long serialVersionUID = 1L; 

      /** 
      * {@inheritDoc} 
      */ 
      @Override 
      public void onRendered(Component component){ 
       if(model.getObject().isEpicFail()){ 
        component.getResponse().write(
        "<tr><td colspan=\"3\">This is an epic fail</td></tr>"); 
       } 
      } 

     }); 
     return item; 
    } 

    private static final long serialVersionUID = 1L; 

} 
+0

Đó là cả hai hoàn toàn tại chỗ và trả lời rất nhanh. Rất cám ơn vì điều đó, tôi đã gãi đầu về vấn đề này trong tuần qua. Chúc mừng! – spikeheap

+0

Không có prob. Wicket thực sự dễ dàng một khi bạn quấn đầu của bạn xung quanh nó, nhưng phải mất một thời gian. –

+0

Rất tiếc khi hiển thị HTML của riêng bạn: o. Nhưng việc ghi đè newRowItem là một khởi đầu tốt, bạn nên tạo một Panel và thêm nó vào mục đó. – RobAu

0

Nếu nhìn vào lớp NavigationToolbar (khuyến nông, DataTable) khi nhìn từ quan điểm của chế độ xem HTML có là một hàng của bảng html, xây dựng đối tượng là khá khác nhau nhưng kết quả là tốt, dữ liệu khác được trình bày trong hàng HTML không phải là một hàng trong bảng Java ý nghĩa (từ mã mà navigator không phải là một phần của bảng đối tượng, là bên ngoài từ điểm đó

Mã phân đoạn đẹp để phân tích

Khi dữ liệu có thể lưu trữ dữ liệu của tôi sẽ là nền tảng để hiển thị trực quan các báo cáo với tổng phụ, tôi biết điều này có thể là

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