使用 Wicket 删除 HTML 标签

Removing an HTML tag using Wicket

我正在使用 wicket 开发 Web 应用程序。假设我有以下 HTML:

<div wicket:id="myDiv">
    ...content...
</div>

现在,那个 div 在那里,因为大多数时候我想在里面写内容。 但是,如果在某些情况下我想 完全删除 div(及其内容)怎么办?这在检票口中可能吗?

我试过了:

remove("myDiv");

在我的 Java 后端,但它抛出异常:

Unexpected RuntimeException
Last cause: Unable to find a component with id 'myDiv' to remove

有什么提示吗?我是 wicket 的新手,我发现很难找到关于如何做像这样的琐碎事情的文档......

最简单的解决方案是添加一个不可见的 WebMarkupContainer,然后它不会在生成的 HTML 代码中呈现:

add(WebMarkupContainer("myDiv").setVisible(false));

要么我不明白问题,要么@meskobalazs 的回答不正确。 通过使用 #setVisible(false) 组件及其所有子组件都不会被渲染,即内部内容也不会被渲染。

以下是我的一些解决方案:
首先是使用 <wicket:container wicket:id="..."> 而不是 <div>。这样它将从最终标记中剥离。参见 IMarkupSettings.setStripWicketTags()。默认情况下,在 DEV 模式下不剥离,在 PROD 模式下剥离。通常我将此设置设置为 true 即使在 DEV 模式下也是如此,因为有时 <wicket:xyz> 标签会破坏 CSS 规则。最好更接近生产环境中运行的内容。

另一种方法是使用Component#setRenderBodyOnly()。通过这种方式,您可以编程方式说 "I want only the content of the HTML element that is attached/used for this Component"。