При игре с видимостью компонента через Ajax необходимо использовать setOutputMarkupPlaceholderTag(true)
, в дополнение к setOutputMarkupId(true)
. Обратите внимание, что setOutputMarkupPlaceholderTag(true)
автоматически подразумевает setOutputMarkupId(true)
.
Причины этого заключаются в том, что когда компонент обновляется через Ajax (добавляя его в AjaxRequestTarget
), Wicket возвращает обновленную разметку в ответе Ajax, так что он будет заменен через API JS-DOM через Ajax метод обратного вызова. Таким образом, для работы функции JS, которая заменит полученную разметку, необходимо иметь ссылку на заменяемый узел DOM (атрибут HTML id
). Вот почему setOutputMarkupId(true)
необходим.
При изменении видимости, если компонент невидим, Wicket не будет генерировать никакой разметки для компонента, что замечательно, но имеет недостаток. Если невидимый компонент оказывается видимым в следующем запросе Ajax, его разметка будет эффективно возвращена в ответе Ajax. Но, поскольку компонент не был виден, он даже не будет существовать в исходной разметке, и будет невозможно заменить узел DOM во время обратного вызова. Вот где метод setOutputMarkupPlaceholderTag(true)
вступает в действие, оборачивая может быть невидимый компонент в тег-заполнитель (т. Е. <div>
), который всегда будет отображаться с соответствующим атрибутом HTML id
,