2017-01-26 6 views
0

У меня есть компонент, который состоит из двух дочерних компонентов A и B. Однако видимость отображения A или B может быть определена только после начала рендеринга страницы. Я пытался это сделать, но вернулся следующее сообщение об ошибке:Изменение видимости дочернего компонента после начала рендеринга

Cannot modify component hierarchy after render phase has started 

Итак, есть ли способ изменить видимость компонентов детей в моем случае?

ответ

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); 
}