Wicket数据表页脚

时间:2012-07-06 14:55:45

标签: datatable sum wicket footer

我想在数据表中添加页脚。它将做一些统计工作,如“总和”。谁能告诉我怎么做?如果你给我看一些例子会很棒。谢谢!

此致

2 个答案:

答案 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组件以及

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