У меня проблема с DropDownChoice и его моделью.HTML-код представляет собой модальное окно, с помощью которого пользователь может редактировать настройки объекта: первый DDC изменяет список второго, когда изменяется его модель, и все работает нормально.Проблема состоит в том, что оба DDC не показывают сохраненное значение, но они показывают первый элемент в связанном списке.Вот некоторый код:
private DropDownChoice<Sala> salaDDC;
private DropDownChoice<Sede> sedeDDC;
private ArrayList<Sala> listaSale;
private Sala sala = null; //they both get correctly initialized afterwards
private Sede sede = null;
[...]
//first DDC, with the "sede" list.
//Its model is based on class Sede, and its list of choices is sediList, which is constant
form.addOrReplace(sedeDDC = new DropDownChoice<>("sedeDDC", Model.of(sede), sediList);
sedeDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
listaSale = listSalePerSede.get(sedeDDC.getModelObject().getId());
if (null != listaSale) {
if (listaSale.isEmpty()) {
listaSale = new ArrayList<>();
}
} else {
listaSale = new ArrayList<>();
}
target.add(salaDDC);
}
});
sedeDDC.setDefaultModelObject(sede);
sedeDDC.setModelObject(sede);
//second DDC, representing the "sala" list
//Its model is based on Sala class, and its list of choices changes if the
//other DDC model object changes, hence the PropertyModel model
form.addOrReplace(salaDDC = new DropDownChoice<>("salaDDC", Model.of(sala), new PropertyModel(this, "listaSale")));
salaDDC.setDefaultModelObject(sala);
salaDDC.setModelObject(sala);
salaDDC.setOutputMarkupId(true);
Итак, предположим, что у вас есть такая ситуация:
- sede1 (содержит sala1, sala2, sala3)
- sede2 (содержитsala4, sala5)
«Седе» означает «отдел», а «Сала» - это комната, поэтому для каждого отдела вы можете иметь список разных комнат.
Если пользователь пытается отредактировать объект с настройками «sede1» и «sala2», диалоговое окно загрузится с первым DDC, показывающим «sede1» (это верно, только случайно), и вторым, показывающим «sala1»(потому что это первый из списка, связанный с "sede1"), а не "sala2".Точно так же, если настройки объекта - «sede2» и «sala5», DDC будет отображать соответственно «sede1» (первый из списка «sede») и «sala4» (первый элемент списка, связанный с «sede2»), в то время какмодельный объект "sala5".Итак, на данный момент пользователь должен заново установить уже сохраненные значения для этих двух полей при редактировании связанного объекта, и это нехорошо.
Я сделал некоторую отладку, и из чегоЯ понял, что и модель, и модель по умолчанию всегда верны: DDC просто не показывает их, и я не могу понять, почему.Дайте мне знать, если потребуется дополнительная информация.