Почему Wicket меняет идентификатор элементов html?
-
21-09-2019 - |
Вопрос
Если я напишу
<form wicket:id="form" id="form>
или даже
<form wicket:id="form>...
Затем визуализированный HTML показывает идентификатор «формы», к которому добавляются разные числа каждый раз, когда страница обновляется, например.
<form id="form7"....
Есть ли способ отключить такое поведение платформы Wicket?
Решение
Это то поведение, которое вам нужно в большинстве случаев при использовании калитки.Динамический идентификатор предназначен для предотвращения конфликтов идентификаторов, когда поведение Ajax добавляется к компонентам или добавляется в ответы Ajax для обновления.В любой из этих ситуаций вам действительно нужно, чтобы и ответ клиента, и состояние сервера были в сговоре.Если есть внешние ресурсы js, вам нужен идентификатор компонента для поиска в dom, тогда я бы предложил добавить собственное поведение компонента калитки, которое затем генерировало бы вызов js для функции, передающей сгенерированный идентификатор.
Я понимаю, что то, что я собираюсь описать, приведет вас еще больше в лес Уикет.Но я более чем доволен возможностями ajaxy, которые Wicket открывает для вас из коробки.
Другие советы
В нашем проекте мы вручную устанавливаем идентификаторы разметки, чтобы упростить автоматическое тестирование с помощью среды тестирования Selenium.Это определенно работает.
Component.setOutputMarkupId(true); // write id attribute of element to html
Component.setMarkupId("someid"); // id attribute of element is "someid"
Это особенность дизайна Wicket.Вы можете использовать класс для связывания стилей и компонентов.
<form wicket:id="form" id="form>
Также можно попробовать (я никогда этого не делал) setMarkupId .Я не уверен, что это хороший способ.
Я давно не работал с Wicket, но помню, что когда wicket использует элементы ajax, его id
генерируются автоматически ( id
тега, а не wicket:id
).Вы можете контролировать идентификатор тега, если он не используется, и элемент ajax.В вашем случае, поскольку кода нет, я предполагаю, что вам придется изменить любой AjaxButton
или Ajax*
из вашей формы.
Да, вы можете написать собственный JavaScript...вам просто нужно реализовать это в соответствии с «способом калитки».Вы можете декорировать компоненты, вызовы Ajax и т. д.с пользовательским JavaScript, тогда все будет хорошо.