Wicket RadioGroup涉及多个实体

时间:2013-08-09 11:48:31

标签: java wicket

我发现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中解决这个问题:(

2 个答案:

答案 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)

无线电组如何工作基本上是你为无线电组的每个选择添加无线电。然后,当选择其中一个无线电时,该组的模型对象将从所选无线电更改为模型对象。

另见http://www.wicket-library.com/wicket-examples/compref/wicket/bookmarkable/org.apache.wicket.examples.source.SourcesPage;jsessionid=13F0ADB2C785F4A9A1C04519A050A37A?0&SourcesPage_class=org.apache.wicket.examples.compref.Index&source=RadioGroupPage.java

本质上:

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();