0

遅延読み込みを使用して、ページにいくつかのウィケット フラグメントをレンダリングしたいと考えています。Java サンプルは次のとおりです。

staticPanel.add(new AjaxLazyLoadPanel("fragment4Span") {

        @Override
        public Component getLazyLoadComponent(String id) {
            fragment4 = new Fragment4(id, "fragment4", this);
            fragment4.add(propertyLoop4);
            return fragment4;
        }
    });

そしてhtmlコンポーネント:

<span wicket:id="fragment4Span"></span>
<wicket:fragment wicket:id="fragment4">
</wicket:fragment>

しかし、私は以下の例外を受け取ります:

org.apache.wicket.markup.MarkupException: Markup of component class `org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel` does not contain a fragment with wicket:id `fragment4`. Context: [MarkupContainer [Component id = content]]
at org.apache.wicket.markup.html.panel.Fragment.renderFragment(Fragment.java:262)
at org.apache.wicket.markup.html.panel.Fragment.onComponentTagBody(Fragment.java:212)
at org.apache.wicket.Component.renderComponent(Component.java:2680)
at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1538)

その理由は何ですか?ちなみに、グーグルで答えを見つけることができませんでした。

4

2 に答える 2

1

AjaxLazyLoadPanelthisインスタンスを参照するものをフラグメント コンテナーとして渡します。ただし、エラー メッセージに示されているように、フラグメントが含まれていません。あなたのページ/パネルがそうだからです。

したがって、実際には、ページ/パネルへの参照を Fragment コンストラクターに渡す必要があります。

fragment4 = new Fragment4(id, "fragment4", CurrentPageOrPanelName.this);

もう 1 つの可能性 (これが機能するかどうかは完全にはわかりません) は、フラグメントが ALLP 内にあるようにマークアップを変更することです。

<span wicket:id="fragment4Span">
  <wicket:fragment wicket:id="fragment4">
  </wicket:fragment>
</span>
于 2013-01-16T08:27:19.893 に答える
0

マークアップには、フラグメントを追加するものが何も含まれていません...つまり、id 変数と一致する可能性のある id を持つコンポーネントがありません。LazyLoadPanel となる fragment4Span があります。フラグメント ID「fragment4」を持つフラグメントがありますが、一致する「レシーバー」はありません...

参照:フラグメントに関する Wicket の例

于 2013-01-15T16:35:29.940 に答える