我有一个AjaxFallbackDefaultDataTable包含每个测试结果一行。测试结果可能附有注释,需要在测试结果下方突出显示,希望可以提供类似于以下内容的表格:
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渲染器,但是没有一行可以处理。
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
我认为没有做到这一点的干净方法,您将不得不修改生成的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; }