Почему Wicket меняет идентификатор элементов html?

StackOverflow https://stackoverflow.com/questions/2077560

  •  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, тогда все будет хорошо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top