我尝试实现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() {...} )以确保主体仅执行一次。

10-06 07:21