我正在尝试将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);
}
}
答案 0 :(得分:1)
建议在onInitialize方法中添加组件(如页脚面板),而不是在构造函数中。通过在onInitialize中添加它们,父组件已经是组件树的一部分并且已完全构造。
在第一次呈现页面之前,onInitialize在所有组件上被重新调用。