Wicket - DropDownChoice POJO到物业模型

时间:2012-08-22 13:02:08

标签: wicket dropdownchoice

DropDownChoice几乎没有问题。 我用一个Object列表构建一个DropDownChoice。 举个例子:

public MyClass 
  private String code;
  private String description;
[...]

而不是另一个对象

public FormModelObject
   private String code;

我可以轻松地使用ChoiceRender选择显示(描述属性)和获取(代码属性)的DropDownChoice。

不幸的是,DropDownChoice返回整个Object(MyClass),我无法在FormModelObject中设置属性Code(它只是在MyClass上启动toString()方法)。

如何在不使用Ajax的情况下获取它?

由于

4 个答案:

答案 0 :(得分:1)

尝试使用模型链接。您应该使用如下构建的属性模型替换表单的变量代码:

//this is the model of your DropDownChoice
Model<MyClass> myModel = new Model<MyClass>();
//...

PropertModel myCode = new PropertModel(myModel, "code");

现在使用myCode而不是表单中的代码。

答案 1 :(得分:1)

好吧,您可以覆盖DropDownChoice的onModelChanged()方法,并使用新值更新residenceZipCode。类似的东西:

DropDownChoice<City> drop = new DropDownChoice<City>("residenceZipCode",new Model(), cityList,new ChoiceRenderer<City>("name", "zipcode")){
     onModelChanged(){
       String newZipCode =  (String)PropertyResolver.getValue("zipCode",getModelObject());
       PropertyResolver.setValue("residenceZipCode", res, newZipCode, new  PropertyResolverConverter());
     }

};

DropDownChoice必须有自己的模型。

答案 2 :(得分:1)

看看DDC的类型参数:在你的情况下它是City,因此DDC与City对象一起工作。

如果您不想这样,请更改类型,编译器将指导您:

DropDownChoice<String> drop = new DropDownChoice<String>("residenceZipCode",zipCodesList,new CityChoiceRenderer());

class CityChoiceRenderer implements IChoiceRenderer<String> {
  Object getDisplayValue(String zipCode) {
    return zipCodeToName(zipCode);
  }

  String getIdValue(String zipCode, int index) {
    return zipCode;
  }
}

答案 3 :(得分:0)

最好写一些代码:

    class City {
      private String zipCode;
      private String name;
    }

    class Residence {
      private String residenceZipCode;
    }

protected Residence res;

public ResidenceForm() {
  super("form", new CompoundPropertyModel<Residence>(res));

  List<City> cityList = someManager().loadAllCity();

  DropDownChoice<City> drop = new DropDownChoice<City>("residenceZipCode",cityList,new ChoiceRenderer<City>("name", "zipcode"));
add(drop);

现在。我无法更改Residence或City,我无法在onSubmit按钮的方法中编写代码。

我想要的是Residence内的邮政编码。我现在获得的是City.toString()

的等价物