如何将“子行”插入 Wicket DataTable
Posted
技术标签:
【中文标题】如何将“子行”插入 Wicket DataTable【英文标题】:How to insert 'sub-rows' into a Wicket DataTable 【发布时间】:2011-04-18 20:24:20 【问题描述】:我有一个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
【问题讨论】:
【参考方案1】:我认为没有一种干净的方法可以做到这一点,您将不得不破解生成的 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;
【讨论】:
这既是绝对正确的,也是一个非常快速的回复。非常感谢,过去一周我一直在为这个问题摸不着头脑。干杯! 没有问题。一旦你把头绕在 Wicket 上,它实际上很容易,但这需要一些时间。 渲染自己的 HTML 有点丑:o。但是覆盖 newRowItem 是一个好的开始,您应该创建一个 Panel 并将其添加到项目中。【参考方案2】:如果看类NavigationToolbar
(扩展名,DataTable
)从HTML的角度看有一行html表,对象构造有很大不同但结果很好,其他数据在HTML行中没有是有意义的 Java 表中的一行(从代码中导航器不是对象表的一部分,从这样的角度来看是外部的。
很好的片段代码分析
当我丰富的数据数据表将成为直观呈现带有小计的报告的平台时,我知道这将是可能的
【讨论】:
以上是关于如何将“子行”插入 Wicket DataTable的主要内容,如果未能解决你的问题,请参考以下文章
完整性约束违规:1452 无法将子行添加或更新到我的数据库中
Java:如何将值从javascript设置为wicket组件文本字段