Wicket - DropDownChoice POJO для модели недвижимости
Маленькая проблема с DropDownChoice. Я строю DropDownChoice со списком объектов. Взять, к примеру:
public MyClass
private String code;
private String description;
[...]
чем взять другой объект
public FormModelObject
private String code;
Я могу легко построить DropDownChoice, выбирая, что показать (свойство description) и что получить (свойство code), используя ChoiceRender.
К сожалению, DropDownChoice возвращает весь объект (MyClass), и я не могу установить свойство Code внутри FormModelObject (он просто запускает метод toString() в MyClass).
Как я могу получить его без использования Ajax?
Спасибо
4 ответа
Ну, вы могли бы переопределить метод onModelChanged() DropDownChoice и обновить 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 должен иметь свою собственную модель.
Попробуйте с цепочкой моделей. Вам следует заменить код переменной формы моделью свойства, построенной следующим образом:
//this is the model of your DropDownChoice
Model<MyClass> myModel = new Model<MyClass>();
//...
PropertModel myCode = new PropertModel(myModel, "code");
Теперь используйте myCode вместо кода в вашей форме.
Взгляните на аргумент типа 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;
}
}
Лучше написать код:
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()