我尝试实现BookmarkablePageLink用法的项目使用一个BasePage,然后用不同的Panel填充它。
该URL(例如www.example.com/?number=12345)进入BasePage,从数据库中检索一些信息,并将其传递给新构建的面板。
如果我调试代码并进行一次调试,则一切都将正确显示。但是,BasePage的onConfigure
方法不断被调用。
到目前为止,我还无法弄清楚为什么
protected void onConfigure() {
ToekenningSearchCriteria criteria = new ToekenningSearchCriteria();
criteria.getSearchItem().setNumber(pageParameters.get("number").toString());
Toekenning toekenning = getToekenningService().findWithCriteria(criteria);
this.setContentPanel(this.getContentPanelFactory().getContentPanel("SOME_CONTENT_PANEL_TYPE", toekenning));
}
我希望
onConfigure
方法仅被调用一次,但是被称为无限次。编辑:将代码放在onBeforeRender方法中将得到相同的结果。
最佳答案
您需要onInitialize()
而不是onConfigure()。
onInitialize就像构造函数。区别在于,在Component#onInitialize中,您可以通过getParent()访问父级,而可以通过getMarkup()访问标记。由于我们在这里谈论Page,所以没有父母。
每个有状态页面请求都会调用onConfigure()。您可以执行if (!hasBeenRendered() {...} )
以确保主体仅执行一次。