2010-09-29 28 views
6

我有一個AjaxFallbackDefaultDataTable,其中每個測試結果包含一行。測試結果可以具有附接到其的說明,其需要在下面的試驗結果顯着地顯示,希望給予類似於下面的表:如何在'Wicket DataTable'中插入'子行'

| 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 | 

有沒有任何方法來實現這一行插入(優選地具有列跨越)使用Wicket DataTable構造。當我深入到源代碼中時,我可以找到Item渲染器,但沒有涉及到任何行。

目前,我有以下幾點:

// 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 

回答

10

我不認爲這是一個乾淨的方式做到這一點,你將不得不劈生成的HTML。

我會附上一個自定義的行爲自動生成所需的HTML行,像這樣:

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

這是絕對的現貨和非常快速的答覆。非常感謝,過去一週我一直在爲這個問題撓頭。乾杯! – spikeheap 2010-09-29 17:09:46

+0

沒有問題。 Wicket實際上很容易,一旦你將頭圍繞在它上面,但這需要一些時間。 – 2010-09-29 19:54:18

+0

渲染自己的HTML有點醜陋:o。但是重寫newRowItem是一個好的開始,您應該創建一個Panel並將其添加到該項目中。 – RobAu 2014-03-10 09:14:19

0

如果看看NavigationToolbar類(擴展,DataTable)從查看HTML那裏的點看時是一行html表,對象構造有很大不同但效果很好,其他數據在意義上不是行中的HTML行中呈現的Java表(從導航器不屬於對象表的一部分的代碼,

尼斯片段代碼分析

當我的數據豐富Datatable將是平臺,以可視化方式呈現小計的報告,我知道這將是可能的