如何将“子行”插入Wicket DataTable

时间:2010-09-29 13:59:34

标签: java ajax datatable wicket

我有一个AjaxFallbackDefaultDataTable,每个测试结果包含一行。测试结果可能附有注释,需要在测试结果下方显着显示,希望提供类似于以下内容的表:

| 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

2 个答案:

答案 0 :(得分:11)

我认为没有一种干净的方法,你必须破解生成的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;

}

答案 1 :(得分:0)

如果从类视角看HTML时看看类NavigationToolbar(扩展名,DataTable),则有一行html表,对象构造完全不同但结果很好,其他数据呈现在HTML行中,不是感测Java表中的一行(从导航器不是对象表的一部分的代码,从这种观点来看是外部的。

分析好的片段代码

当我丰富的Datatable数据将成为可视化呈现小计的报告的平台时,我知道这将是可能的