tag.put("id", this.getId());
не способ сделать это в калитку.
вместо этого, используйте
component.setOutputMarkupId(true)
(либо в вашем компоненте конструктора или в безвыходном вашего поведения (в) метод), чтобы калитка написать идентификатор, и если вы абсолютно необходимо контролировать то, что идентификатор (который почти никогда не бывает), вы можете сделать
component.setMarkupId("myId")
также, вы, вероятно, не следует назначать значение тега самостоятельно, использовать модель (модель обработки чрезвычайно умный в калитку, прочтите more about models). Для onComponentTag допустимы действия, но они намного превосходят то, что вы делаете. Пусть калитка делает то, что делает калитка, и все будет хорошо.
EDIT: ОК, еще некоторые разъяснения
посмотреть на the source code of AjaxFormComponentUpdatingBehavior, особенно ту часть, где сгенерирован Javascript обработчик событий.
protected final CharSequence getEventHandler()
{
return generateCallbackScript(
new AppendingStringBuffer("wicketAjaxPost('")
.append(getCallbackUrl(false)).append(
"', wicketSerialize(Wicket.$('"
+ getComponent().getMarkupId() + "'))"));
}
Как вы можете видеть, калитка использует getMarkupId() для определения фактического идентификатора. Идентификатор, который вы задали с помощью tag.put (id), полностью неизвестен калитке, и поэтому поведение не может работать.
Ставка ¥ особые пометки Для покупок необходима авторизация Стандартная вещь, чтобы сделать - установленOutputMarkupId (true). Это единственный правильный способ показать калитки для отображения id (кроме setOutputMarkupPlaceholder (true), который внутренне вызывает прежний метод). Таким образом, вы убедитесь, что запись калитки id - это идентификатор калитки. Если это не отображает идентификатор, вы, вероятно, нарушаете поведение по умолчанию, перезаписывая onComponentTag.
Посмотрите the source code of Component, особенно на 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 с калитки и сообщите об ошибке. Но я сомневаюсь, что это стандартная функциональность, которая работает для тысяч пользователей.
вы забыли setOutputMarkupId (true) :-) –
См. источник AbstractDefaultAjaxBehavior.onBind() - поведение устанавливает для вас флаг (извините, это было неясно - Я отредактировал свой ответ, чтобы сделать его более ясным). – ireddick