使用 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:message
是 new 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
我的 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:message
是 new 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