我想在数据表中添加页脚。它将做一些统计工作,如“总和”。谁能告诉我怎么做?如果你给我看一些例子会很棒。谢谢!
此致
答案 0 :(得分:1)
这是一个例子。在此示例中,我们将创建包含发票表的页面。每行一张发票。在表格的底部将是工具栏,其中将显示所有发票的总和。
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'将显示文本'total sum',标签'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 - value将是对象的属性)。我们创建模型(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进行测试。
答案 1 :(得分:0)
在填充数据表时,例如使用ListView,您应该增加稍后将在Label中使用的整数模型。
Model sumModel = new Model(0); listview = new ListView(...) { ... populate(ListItem item) { int N = // whatever value you need sumModel.setObject(sumModel.getObject() + N); } } add(listview); // ... Label sumFooter = new Label("footer", sumModel); add(sumFooter);
PS:我没有测试过这个。
修改强> 您应该检查CountLabel组件以及