0

あるフラグメントを互いに入れ子にしようとしています。リストビューは親フラグメントで満たされています(これは機能します)。2番目のフラグメントが最初のフラグメント内にネストされている場合があります。リストビューにデータを入力するコードは次のとおりです。

@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>

ネストされたフラグメントがない場合 (if 条件が false)、UI は期待どおりに表示されます。条件が true の場合は、次のエラーが表示されます。

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]]

コンポーネント階層に関連するものだと思いますが、どの方法が正しいかわかりません。

4

1 に答える 1

0

問題はmsg.getType() != MessageType.RESERVATION、 id の下に何も追加しない場合のようですmessageRatingContainer

常に追加してsetVisible()から、レンダリングするかどうかに応じて true と false で呼び出す必要があります。

ところで、上記のコード スニペットからは、フラグメントを使用する必要性がまったくわかりません。

于 2012-05-29T18:09:48.020 に答える