2012-05-29 140 views
0

我試圖將一個片段嵌套到另一個片段中。一個列表視圖填充了父代片段(它的工作原理),現在我想在某些情況下第二個片段嵌套在第一個片段中。這裏是我的代碼來填充我的列表視圖:Wicket嵌套片段

@Override 
protected void populateItem(final Item<Message> item) { 
    Message msg = item.getModelObject(); 
    MessageFragment msgFragment = new MessageFragment("entry", "messageFragment", this, msg); 
    WebMarkupContainer msgRatingContainer = new WebMarkupContainer("messageRatingContainer"); 
    msgRatingContainer.setVisible(false); 
    if(msg.getType() == MessageType.RESERVATION){ 
     msgRatingContainer.add(new MessageRatingFragment("messageRatingContainer", "messageRatingFragment",this, msg));     
     msgRatingContainer.setVisible(true); 
    } 
    msgFragment.add(msgRatingContainer); 
    item.add(msgFragment); 
} 

的參與標記:

<li wicket:id="listView"><div wicket:id="entry"></div></li> 
<wicket:fragment wicket:id="messageFragment"> 
    <div class="MessageAlert"> 
     My Parent fragment content 
    </div> 
    <div wicket:id="messageRatingContainer"></div> 
    <wicket:fragment wicket:id="messageRatingFragment"> 
     My nested fragment content 
    </wicket:fragment> 
</wicket:fragment> 

如果我沒有任何嵌套片段(如果條件爲假)呈現在UI不如預期,如果條件爲真,我收到以下錯誤:

org.apache.wicket.WicketRuntimeException: The component(s) below failed to render. A common problem is that you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered). 
1. [MarkupContainer [Component id = messageRatingContainer]] 
2. [MarkupContainer [Component id = messageRatingContainer]] 

我想是一些與組件層次結構連接,但我無法找出哪些方法是正確的。

回答

0

這個問題似乎是,如果msg.getType() != MessageType.RESERVATION,你沒有在編號messageRatingContainer下添加任何東西。

您應該隨時添加它,然後根據是否要渲染它,用true和false調用setVisible()

順便說一句,從上面的代碼片段中,我根本無法真正看到需要使用片段。

+0

MarkupContainer「messageRatingContainer」總是通過msgFragment.add(msgRatingContainer)添加到標記中,實際上當我在if條件內添加嵌套片段時,問題發生不在外面(it msg.getType()!=它始終工作的MessageType.RESERVATION) – Wizche