#html #attributes #label #wicket
#HTML #атрибуты #ярлык #калитка
Вопрос:
Я новичок в wicket и хочу добавить свойство (с именем other-id) к ярлыку. Код выглядит следующим образом:
private String getName(ExampleList list) {
return getBrandName() " " getString("ExampleList." list.name());
}
IModel<List<ExampleList>> listModel = new AbstractReadOnlyModel<List<ExampleList>>() {
@Override
public List<ExampleList> getObject() {
return availableTechnologies.getObject().keySet().stream().collect(Collectors.toList());
}
};
ListView<ExampleList> example = new ListView<ExampleList>("list", listModel) {
@Override
protected void populateItem(ListItem<ExampleList> el) {
el.add(new Radio<ExampleList>("radio", item.getModel()));
el.add(new Label("labelName", getName(el.getModelObject())));
}
};
И это соответствующий html:
<li wicket:id="list" class="radio">
<input wicket:id="radio" type="radio" name="radioChoice"/>
<label wicket:for="radio"><wicket:container wicket:id="labelName" /></label>
</li>
Я хочу добавить другой идентификатор к ярлыку с именем метки в другой идентификатор. До сих пор я пытался
el.add(new Label("labelName", getName(el.getModelObject())).add(new AttributeAppender("other-id", getName(el.getModel())));
но в моем ярлыке ничего не появилось.
Я также пробовал в html:
<label wicket:for="radio" other-id= wicket:id="labelName">
но это выдает мне ошибку при моей последней попытке.
Есть идеи, как это сделать?
Ответ №1:
Чтобы установить ярлык на компоненте формы, вам необходимо использовать setLabel
метод. В вашем populateItem
методе вы можете выполнить следующее:
Radio<ExampleList> radio = new Radio<>("radio", item.getModel())
radio.setLabel(Model.of(getName(el.getModelObject())));
el.add(radio);
Чтобы это сработало, вы должны изменить свой HTML, чтобы удалить wicket:container
внутреннюю часть метки:
<li wicket:id="list" class="radio">
<input wicket:id="radio" type="radio" name="radioChoice"/>
<label wicket:for="radio"></label>
</li>
Ответ №2:
Проблема в том, что вы добавляете AttributeAppender в wicket:container
. Этот элемент отображает только его тело, то есть текст ярлыка, но сам тег не отображается, и из-за этого его атрибуты также не отображаются.
Вы можете изменить свою разметку на:
<label wicket:for="radio" wicket:id="labelName"></label>
Таким образом, AttributeAppender добавит новый атрибут к <label>
элементу.
Комментарии:
1. К сожалению, я не могу изменить html. Я попробовал, но это дало мне еще одну ошибку, поэтому я должен сохранить этот формат с помощью wicket:container
2. Вместо страницы с определенным списком появляется сообщение об ошибке Интернета
3. Пожалуйста, создайте мини-приложение, демонстрирующее проблему, и поделитесь им на GitHub / GitLab / BitBucket /… и мы посмотрим!