apache wicket - 将PagingNavigator组件添加到页脚面板

时间:2014-01-03 13:08:07

标签: listview wicket

我正在尝试将Wicket PagingNavigator添加到我的Wicket WebPage中的页脚面板,但它所涉及的PageableListView位于页面正文中。

我已经构建了一个Wicket基页,它有一个简单的页脚面板。然后我创建了一个扩展我的基页的WebPage,因此继承了我的页脚面板。

在我的WebPage上,我添加了一个完美运行的PageableListView。我的问题是我现在希望为我的PageableListView添加一个PagingNavigator,但我想将Navigator添加到我的页脚面板。

当我调用我的WebPage的构造函数时,它的第一个调用是super(),它反过来将我的页脚添加到页面,然后我的PageableListView在页脚构造函数被调用之后添加。

我试图通过向我的页脚添加一个虚拟PageableListView并使用空模型来解决这个问题,然后在WebPage中填充后将PageableListView更新为我的实际ListView。但是,看起来我的页脚面板中的PagingNavigator仍然静态地引用了初始的虚拟ListView。任何想法如何让我的页脚中的PagingNavigator引用正确的PageableListView?

提前感谢任何可以指导我正确方向的人,让我正确地将我的PagingNavigator添加到我的页脚面板中...

基页:

public class BasePage extends WebPage {

private Component footerPanel;


public BasePage() {
    add(footerPanel = new FooterPanel("FooterPanel"));
}

public Component getFooterPanel() {
    return footerPanel;
}
}

页脚面板:

public class FooterPanel extends Panel {

private PageableListView listView = new PageableListView("dummy", new Model(), 1) {
    @Override
    protected void populateItem(ListItem listItem) {

    }
};

public FooterPanel(String id) {
    super(id);

    add(new PagingNavigator("navigator", listView));
}

public void setListView(PageableListView listView) {
    this.listView = listView;
}
}

MyPage:

public class MyPage extends BasePage {


public MyPage() {
    super();

     MyModel model = new MyModel();

    PageableListView listView = new PageableListView<IModel>("list", model, 5) {

        @Override
        protected void populateItem(ListItem item) {
            final DomainObject object = (DomainObject) item.getModelObject();
            item.add(new Label("label", object.getSomething()));
            }
    };
    add(listView);
    FooterPanel footer = (FooterPanel)this.getFooterPanel();
    footer.setShiftList(shiftList);

}
}

1 个答案:

答案 0 :(得分:1)

建议在onInitialize方法中添加组件(如页脚面板),而不是在构造函数中。通过在onInitialize中添加它们,父组件已经是组件树的一部分并且已完全构造。

在第一次呈现页面之前,

onInitialize在所有组件上被重新调用。