我有一个由两个子组件A和B组成的组件。但是,显示A或B的可见性只能在页面呈现开始后确定。我试图这样做,但得到了以下错误:
Cannot modify component hierarchy after render phase has started
那么,有没有办法在我的情况下改变子组件的可见性?
答案 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);
}