我想在数据表中添加页脚。它会做一些统计工作,比如“sum”。谁能告诉我如何做到这一点?如果你给我看一些例子,那就太好了。谢谢!
问候
这是一个例子。在此示例中,我们将创建带有发票表格的页面。每行一张发票。表格底部将是工具栏,其中将显示所有发票的总和。
Invoice.java(代表一张发票的对象)
public class Invoice implements Serializable {
private String description;
private int sum;
public Invoice() {}
public Invoice(String description, int sum) {
this.description = description;
this.sum = sum;
}
// setters and getters
}
InvoiceDataProvider.java(表的数据提供者)
public class InvoiceDataProvider implements IDataProvider {
private List<Invoice> invoices;
public InvoiceDataProvider(IModel<Double> sumModel) {
invoices = new ArrayList<Invoice>();
invoices.add(new Invoice("for rent", 550));
invoices.add(new Invoice("for phone", 25));
invoices.add(new Invoice("for insurance", 10));
// reset sumModel
sumModel.setObject(0.0);
// count the sum of invoices
for (Invoice invoice : invoices) {
sumModel.setObject(sumModel.getObject() + invoice.getSum());
}
}
@Override
public void detach() {
}
@Override
public Iterator iterator(long first, long count) {
return invoices.iterator();
}
@Override
public IModel model(final Object object) {
return new AbstractReadOnlyModel<Invoice>() {
@Override
public Invoice getObject() {
return (Invoice) object;
}
};
}
@Override
public long size() {
return invoices.size();
}
}
在数据提供者中,我们将数据显示在表格(发票列表)中。然后我们计算列表中发票的总和并将结果添加到模型中。
InvoicesToolbar.java(表格的工具栏。这里将显示发票的总和)
public class InvoicesToolbar extends AbstractToolbar {
private IModel<Double> sumModel;
public InvoicesToolbar(DataTable table, IModel sumModel) {
super(table);
this.sumModel = sumModel;
add(new Label("sumText", Model.of("total sum")));
add(new Label("sumNumber", sumModel));
}
}
我们保存 sumModel 并创建两个标签。标签“sumText”将显示文本“总和”,标签“sumNumber”将显示存储在模型(sumModel)中的值。
InvoicesToolbar.html(工具栏是面板,因此应创建适当的 html 文件)
<?xml version="1.0" encoding="UTF-8" ?>
<wicket:panel xmlns:wicket="http://wicket.apache.org">
<tr>
<td><span wicket:id="sumText"></span></td>
<td><span wicket:id="sumNumber"></span></td>
</tr>
</wicket:panel>
我们创建一个包含两个单元格的表格行(表格将有两列)并添加带有 wicket id 的 html 元素以在那里呈现一些文本。
DataTablePage.java(带有表格的网页)
public class DataTablePage extends WebPage {
public DataTablePage() {
List<IColumn> columns = new ArrayList<IColumn>();
columns.add(new PropertyColumn(Model.of("description"), "description"));
columns.add(new PropertyColumn(Model.of("sum"), "sum"));
IModel<Double> sumModel = new Model<Double>(0.0);
DataTable table = new DataTable("table", columns, new InvoiceDataProvider(sumModel), 10);
table.addTopToolbar(new HeadersToolbar(table, null));
table.addBottomToolbar(new InvoicesToolbar(table, sumModel));
add(table);
}
}
我们创建列列表(PropertyColumn - 值将是对象的属性)。我们创建模型(sumModel)。在此模型中,最近将存储发票的总金额。我们创建表。在此表(顶部)中,我们添加了标题工具栏(列的标题),并且(在底部)我们添加了 InvoiceToolbar。
DataTablePage.html(网页的 Html 标记)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Table</title>
</head>
<body>
<table wicket:id="table"></table>
</body>
</html>
在 wicket-core 依赖之上,我们还需要 wicket-extensions 依赖。该代码使用 wicket 6.18.0 进行了测试。
当填充数据表时,例如使用 ListView,您应该增加一个整数模型,该模型稍后将在标签中使用。
模型 sumModel = new Model(0); 列表视图 = 新列表视图(...){ ...填充(列表项){ int N = // 你需要的任何值 sumModel.setObject(sumModel.getObject() + N); } } 添加(列表视图); // ... 标签 sumFooter = new Label("footer", sumModel); 添加(总和页脚);
PS:我没有测试过这个。
编辑 您还应该检查 CountLabel 组件