渲染开始后更改子组件的可见性

时间:2017-01-26 16:14:22

标签: html wicket

我有一个由两个子组件A和B组成的组件。但是,显示A或B的可见性只能在页面呈现开始后确定。我试图这样做,但得到了以下错误:

Cannot modify component hierarchy after render phase has started

那么,有没有办法在我的情况下改变子组件的可见性?

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解你的问题。 我假设您有2个容器,并且只想显示其中一个容器。如果是这种情况,您只需扩展onConfigure()方法并按照您希望的方式更改可见性。在每次渲染期间,此方法将被调用一次,因此优先于扩展isVisible()方法(在每次请求期间多次调用)。

private IModel<Boolean> switchModel = Model.of(Boolean.FALSE);

@Override
protected void onInitialize() {
    super.onInitialize();

    WebMarkupContainer container1 = new WebMarkupContainer("container1") {
        @Override
        protected void onConfigure() {
            super.onConfigure();
            setVisible(Boolean.TRUE.equals(switchModel.getModelObject()));
        }
    };
    add(container1);

    WebMarkupContainer container2 = new WebMarkupContainer("container2") {
        @Override
        protected void onConfigure() {
            super.onConfigure();
            setVisible(Boolean.FALSE.equals(switchModel.getModelObject()));
        }
    };
    add(container2);
}