Калитка добавить другой идентификатор на этикетке

#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 /… и мы посмотрим!