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的情况下获取它?
由于
答案 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()
的等价物