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

您通过this- 它引用 AjaxLazyLoadPanel 实例 - 作为片段容器。但正如错误消息所述,它不包含该片段。Whis 是真的,因为您的页面/面板确实如此。

因此,您实际上需要将对页面/面板的引用传递给 Fragment 构造函数:

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

另一种可能性(不完全确定这是否有效)是更改您的标记,以便片段位于 ALLP 内:

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

您的标记不包含任何可将片段添加到... 即没有可能与您的 id 变量匹配的 id 组件。你有fragment4Span,这将是你的LazyLoadPanel,你有一个片段ID为“fragment4”但没有匹配的“接收器”的片段......

请参阅:有关片段的 Wicket 示例

于 2013-01-15T16:35:29.940 回答