2017-01-26 2 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); 
}