在通常不呈现为标记的组件上设置的标记 ID

Markup id set on a component that is usually not rendered into markup

我收到这条消息:

Markup id set on a component that is usually not rendered into markup. Markup id: pnlMessages3a, component id: pnlMessages, component tag: wicket:panel.

面板被添加到这样的封闭面板中:

add(new MessagePanel("pnlMessages"));

在html

<wicket:panel wicket:id="pnlMessages">tblData</wicket:panel>

在 MessagePanel 中,我调用 super(id) 将组件 ID "pnlMessages" 传递给父级 class。 class MessagePanel 中没有其他组件启用 OutputMarkupId。

那么为什么我会收到警告?

我不得不提一下,使用 AjaxSelfUpdatingTimerBehavior

在 MessagePanel 中更新了一些标签和图像

原因是你误用了<wicket:panel>。 它的目的是包装MyPanel.html的HTML内容。 IE。 Wicket 将使用内容 <wicket:panel> CONTENT </wicket:panel> 作为应包含在另一个面板或页面中的标记。

此外,Wicket 在生产模式下不会呈现任何 <wicket:xyz> 元素。因此,尝试使用 Ajax 更新此类 HTML 元素将失败,因为它不会在 DOM.

您应该将其替换为:<div wicket:id="pnlMessages">tblData</div>