tag.put("id", this.getId());
- это не способ сделать это в калитке.
Вместо этого используйте
component.setOutputMarkupId(true)
(либо в конструкторе компонента, либо в методе bind () вашего поведения) дляЗаставьте wicket написать идентификатор, и если вам абсолютно необходимо контролировать, что это за идентификатор (а это почти всегда так), вы также можете сделать
component.setMarkupId("myId")
, вам, вероятно, не следует присваивать значение тега самостоятельно,используйте модель (в калитке обработка модели очень умна, читайте подробнее о моделях ).Существуют допустимые варианты использования onComponentTag, но они намного превосходят то, что вы делаете.Позвольте калитке делать то, что лучше всего, и все будет хорошо.
РЕДАКТИРОВАТЬ: ОК, еще уточнения
взгляните на исходный код AjaxFormComponentUpdatingBehavior особенно в той части, где генерируется обработчик событий javascript.
protected final CharSequence getEventHandler()
{
return generateCallbackScript(
new AppendingStringBuffer("wicketAjaxPost('")
.append(getCallbackUrl(false)).append(
"', wicketSerialize(Wicket.$('"
+ getComponent().getMarkupId() + "'))"));
}
, как вы можете видеть, wicket использует getMarkupId () для определения фактического идентификатора.Идентификатор, который вы устанавливаете с помощью tag.put (id), совершенно неизвестен калитке, и, следовательно, поведение не может работать.
Стандартным способом является setOutputMarkupId (true).Это единственный правильный способ сообщить калитке, что нужно визуализировать идентификатор (кроме setOutputMarkupPlaceholder (true), который внутренне вызывает первый метод).Таким образом, вы можете быть уверены, что id wicket пишет то, о чем знает wicket.Если это не отображает идентификатор, вы, вероятно, нарушаете поведение по умолчанию, перезаписывая onComponentTag.
Посмотрите на исходный код компонента , особенно на onComponentTag (), методВы переопределяете:
protected void onComponentTag(final ComponentTag tag) {
// if(setOutputMarkupId(true) was set)
if (getFlag(FLAG_OUTPUT_MARKUP_ID)) {
// set id attribute
tag.put(MARKUP_ID_ATTR_NAME, getMarkupId());
}
}
[Комментарии мои.Кстати, это источник древней версии, но я не нашел ни одного текущего источника в сети, и функциональность не изменилась.] *
Теперь, если, как и в вашем случае, вы хотите установитьидентификатор компонента вручную, вы должны использовать
component.setMarkupId("myId")
и , конечно,
setOutputMarkupId(true)
.Если это не сработает, перейдите на сайт калитки JIRA и отправьте сообщение об ошибке.Но я сомневаюсь, что это стандартная функциональность, которая работает для тысяч пользователей.