1

我想在数据表中添加页脚。它会做一些统计工作,比如“sum”。谁能告诉我如何做到这一点?如果你给我看一些例子,那就太好了。谢谢!

问候

4

2 回答 2

2

这是一个例子。在此示例中,我们将创建带有发票表格的页面。每行一张发票。表格底部将是工具栏,其中将显示所有发票的总和。

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 进行了测试。

于 2014-12-03T15:59:20.243 回答
0

当填充数据表时,例如使用 ListView,您应该增加一个整数模型,该模型稍后将在标签中使用。


     模型 sumModel = new Model(0);
        列表视图 = 新列表视图(...){
            ...填充(列表项){
                int N = // 你需要的任何值
                sumModel.setObject(sumModel.getObject() + N);
            }
        }
        添加(列表视图);
        // ...
        标签 sumFooter = new Label("footer", sumModel);
        添加(总和页脚);

PS:我没有测试过这个。

编辑 您还应该检查 CountLabel 组件

http://opensource.55minutes.com/apidocs/fiftyfive-wicket-all/4.0-SNAPSHOT/fiftyfive/wicket/basic/CountLabel.html

于 2012-08-16T15:03:40.907 回答