我发现wicket的RadioGroup完全令人困惑。我在转发器中有n个实体,我想在其中设置字段“booleanvalue”。所以这是我的代码:
RadioGroup radioGroup = new RadioGroup<>("someGroup", new Model(entityXYZ));
radioValue = new Radio("radioValue",
new PropertyModel(entityXYZ, "booleanValue"), radioGroup);
repeaterContainer.add(radioValue);
// add other stuff to repeater
我发现的所有例子似乎都不适用。我不想在radioGroup中使用单个实体,但是我想要只允许一个实体设置其中的一个实体。 我尝试了各种模型组合,但都没有。
更新:组件层次结构似乎有问题。我无法将radioValues添加到同一层次结构中,因为在转发器内可以添加自定义用户输入以及其他RadioGroup。此外,该组不是由单个对象组成,而是由多个对象组成,其中只有一个对象应该设置布尔值。在HTML中这没有问题,但我没有看到任何方法在Wicket中解决这个问题:(
答案 0 :(得分:0)
您想要更新一组实体的属性吗?
RadioGroup<Entity> group = new RadioGroup<Entity>("someGroup", new IModel<Entity>() {
public void setObject(Entity entity) {
for (Entity candidate : entities) {
candidate.setBooleanValue(candidate == entity);
}
}
public Entity getObject() {
for (Entity candidate : entities) {
if (candidate.getBooleanValue()) {
return candidate;
}
}
return null;
}
});
group.add(new ListView("entities", entities) {
protected void populateItem(final ListItem<Entity> item)
item.add(new Radio("radio", item.getModel());
}
});
答案 1 :(得分:0)
无线电组如何工作基本上是你为无线电组的每个选择添加无线电。然后,当选择其中一个无线电时,该组的模型对象将从所选无线电更改为模型对象。
本质上:
RadioGroup<SomeEntity> group = new RadioGroup<SomeEntity>("somegroup", new Model<Entity>(null));
group.add(new Radio("choice1", new Model<SomeEntity>(someEntityA));
group.add(new Radio("choice2", new Model<SomeEntity>(someEntityB));
form.add(group);
然后在表单提交中,您可以执行以下操作:
SomeEntity selectedEntity = group.getModelObject();