我是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>
我想将其他id添加到标签中,并将标签名称添加到其他id中。直到现在我还试过
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">
但我最后一次尝试时出错了。你知道怎么做吗?
要在表单组件上设置标签,需要使用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>
问题是将AttributeAppender添加到wicket:container
中。该元素仅渲染其主体,即标签的文本,但标记本身不会渲染,因此其属性也不会渲染。
您可以将标记更改为:
<label wicket:for="radio" wicket:id="labelName"></label>
通过这种方式,AttributeAppender将向<label>
元素添加新属性。