我想在延迟加载的页面上渲染一些wicket片段。 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)
可能是什么原因?顺便说一句,我无法通过Google搜索找到答案。
答案 0 :(得分:1)
将this
- 它引用AjaxLazyLoadPanel实例 - 作为片段容器传递。但是,正如错误消息所述,它不包含片段。这是真的,因为您的页面/面板确实如此。
所以你实际上需要将对页面/面板的引用传递给Fragment构造函数:
fragment4 = new Fragment4(id, "fragment4", CurrentPageOrPanelName.this);
另一种可能性(不完全确定这是否有效)是改变你的标记,以便片段在ALLP中:
<span wicket:id="fragment4Span">
<wicket:fragment wicket:id="fragment4">
</wicket:fragment>
</span>
答案 1 :(得分:0)
您的标记中没有任何内容可以将片段添加到...即没有可能与您的id变量匹配的ID的组件。 你有片段4Span,它将是你的LazyLoadPanel,你有一个Fragment片段id“fragment4”但是没有匹配的“receiver”......