0

DropDownChoice 的小问题。我用对象列表构建了一个 DropDownChoice。举个例子:

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

而不是拿另一个对象

public FormModelObject
   private String code;

我可以使用 ChoiceRender 轻松构建 DropDownChoice,选择显示内容(描述属性)和获取内容(代码属性)。

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

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

谢谢

4

4 回答 4

1

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

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

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

现在使用 myCode 代替表单中的代码。

于 2012-08-22T14:02:21.400 回答
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 必须有自己的模型。

于 2012-08-22T19:00:48.200 回答
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;
  }
}
于 2012-08-23T05:57:08.130 回答
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);

现在。我无法更改居住地或城市,也无法在 onSubmit 按钮的方法中编写代码。

我想要的是住宅内的邮政编码。我现在得到的是相当于 City.toString()

于 2012-08-22T14:25:01.223 回答