Скрыть HTML-элемент fiedset с помощью Wicket

У меня есть элемент fieldset на моей 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>

Большое спасибо!


person Δήμητρα Γεωργίου    schedule 26.11.2019    source источник


Ответы (2)


Самый простой способ — иметь Java-компонент и для fieldset:

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>

Если вы хотите, чтобы метка контролировала видимость набора полей, вместо WebMarkupContainer вы могли бы использовать EnclosureContainer

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 отображал только textContent без какого-либо элемента HTML. Если вам не нужен HTML-элемент, вы можете просто использовать вместо него <span>.

person martin-g    schedule 26.11.2019

<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

[редактировать]

Мартин ответил немного быстрее. Несмотря на то, что его решение выглядит немного утомительно, оно определенно имеет свои преимущества, если вы делаете что-то более сложное, чем просто отображение метки. Вы должны прочитать JavaDoc для EnclosureContainer, чтобы понять разницу: https://ci.apache.org/projects/wicket/apidocs/8.x/org/apache/wicket/markup/html/basic/EnclosureContainer..html

person Joachim Rohde    schedule 26.11.2019
comment
На самом деле я избегаю использования <wicket:enclosire>, потому что в нем много ошибок, которые на данный момент действительно трудно решить. Но в 80% случаев работает нормально. - person martin-g; 26.11.2019