使用 Wicket 隐藏 fiedset HTML 元素

Hide a fiedset HTML element with Wicket

我的 HTML 页面中有一个字段集元素,我想在某些情况下隐藏它。

我通常会这样隐藏标签。

HTML 文件

<label class="optional"><wicket:message key="myLabel" /></label>

JAVA 文件

Label myLabel = new Label("myLabel", new ResourceModel("my.label"));
if (true) {
   myLabel.setVisible(false);
}

如何隐藏它?

HTML 文件

<fieldset class="field_set">
    <legend>
        <wicket:message key="anotherLabel"/>
    </legend>
</fieldset>

非常感谢!

最简单的方法是也为 fieldset 添加一个 Java 组件:

WebMarkupContainer fieldset = new WebMarkupContainer("fieldsetId");
add(fieldset);
fieldset.add(new Label("anotherLabel", ...));
...
if (condition) {
   fieldset.setVisible(false);
}


<fieldset class="field_set">
    <legend>
       <wicket:container wicket:id="anotherLabel"/>
    </legend>
</fieldset>

如果您希望标签控制字段集的可见性,那么您可以使用 EnclosureContainer

而不是 WebMarkupContainer
Label label = new Label("anotherLabel", ...);
EnclosureContainer fieldset = new EnclosureContainer("fieldsetId", label);
add(fieldset);
fieldset.add(label);
...
if (condition) {
   label.setVisible(false);
}

注意:我已将 <wicket:message> 的用法更改为 <wicket:container>,因为 wicket:messagenew Label(id, new ResourceModel(key)) 的非 Java 版本。你应该使用一个或另一个。当您需要更多控制时,应该使用 Java 版本,例如在您的情况下控制可见性。 wicket:container 可以在您希望 Wicket 仅呈现没有任何 HTML 元素的 textContent 时使用。如果您不关心 HTML 元素,那么您可以使用 <span> 代替。

<wicket:enclosure>
    <fieldset class="field_set">
        <legend>
            <wicket:message key="anotherLabel"/>
        </legend>
    </fieldset>
</wicket:enclosure>

如果包含的数据值 (anotherLabel) 不可见,wicket:enclosure 标签将隐藏其余部分。如果你有多个元素,你可以传递一个子属性:<wicket:enclosure child="evenAnotherLabel">

另请参阅:https://ci.apache.org/projects/wicket/guide/6.x/guide/keepControl.html#keepControl_9

[编辑]

马丁的回答速度更快一些。尽管他的解决方案看起来有点繁琐,但如果你做一些比仅仅显示标签更复杂的事情,它肯定有其优势。您应该阅读 EnclosureContainer 的 JavaDoc 以了解其中的区别:https://ci.apache.org/projects/wicket/apidocs/8.x/org/apache/wicket/markup/html/basic/EnclosureContainer.html