Java 将选定的DropDownChoice转换为CompoundPropertyModel中的模型

Java 将选定的DropDownChoice转换为CompoundPropertyModel中的模型,java,wicket,wicket-6,Java,Wicket,Wicket 6,当表单具有附加有模型的CompoundPropertyModel时,是否可以通过Wicket方式转换选定的DropDownChoices值,该模型具有另一种特定属性类型 举个简单的例子,因为我想我的解释不是很准确: public enum MyChoices { ONE(1),TWO(2),THREE(3); // ... etc } public class MyEntityModel { private int number; private String

当表单具有附加有模型的CompoundPropertyModel时,是否可以通过Wicket方式转换选定的DropDownChoices值,该模型具有另一种特定属性类型

举个简单的例子,因为我想我的解释不是很准确:

public enum MyChoices {
    ONE(1),TWO(2),THREE(3);
    // ... etc
}

public class MyEntityModel {
    private int number;
    private String text;
}

// the WebPages constructor:
public ChoicePage() {
    IModel<MyEntityModel> model = new CompoundPropertyModel<>(new EntityModel());
    Form<MyEntityModel> form = new Form<MyEntityModel>("form", model);
    add(form);

    form.add(new TextField<String>("text"));
    form.add(new DropDownChoice<>("choices", Model.of(MyChoices.ONE),
             Arrays.asList(MyChoices.values()))

}
公共枚举MyChoices{
一(1)、二(2)、三(3);
//…等等
}
公共类MyEntityModel{
私有整数;
私有字符串文本;
}
//网页构造器:
公共选择页(){
IModel模型=新的CompoundPropertyModel(新的EntityModel());
表单=新表单(“表单”,模型);
添加(表格);
添加(新文本字段(“文本”));
添加(新的下拉选择(“选择”),模型(MyChoices.ONE),
Arrays.asList(MyChoices.values())
}
当提交选中一个的表单时,我希望模型对象的值为
1

我知道,我可以命名DropDownChoice组件而不是MyEntityModel字段,并在提交后将其值复制到模型中。但这不是Wickets模型方法,是吗


附言:我正在使用Wicket 6.17.0,您需要进行一些转换

转换选项列表:

form.add(new DropDownChoice<Integer>("number",
  new AbstractReadOnlyModel<List<Integer>>() {
    public List<Integer> getObject() {
      return MyChoices.getAllAsInts();
    }
  }
);
form.add(新的下拉选择(“数字”),
新的AbstractReadOnlyModel(){
公共列表getObject(){
返回MyChoices.getAllassints();
}
}
);
或选定的选项:

form.add(new DropDownChoice<MyChoices>("number", Arrays.asList(MyChoices.values()) {
  public IModel<?> initModel() {
    final IModel<Integer> model = (IModel<Integer>)super.initModel();

    return new IModel<MyChoice>() {
      public MyChoice getObject() {
        return MyChoice.fromInt(model.getObject());
      }

      public void setObject(MyChoice myChoice) {
        model.setObject(myChoice.toInt());
      }
    };
  }
);
form.add(新的下拉选择(“number”,Arrays.asList)(MyChoices.values()){
公共IModel initModel(){
最终IModel模型=(IModel)super.initModel();
返回新的IModel(){
公共MyChoice getObject(){
返回MyChoice.fromInt(model.getObject());
}
公共void setObject(MyChoice MyChoice){
setObject(myChoice.toInt());
}
};
}
);

第二种解决方案正是我想要的。它唯一的缺陷是未经检查的强制转换,我通常会尽量避免。