У меня есть простой Java-класс, назовем его Person: он содержит, как следует из названия, информацию о человеке. Таким образом, у него есть такие свойства, как имя, фамилия, адрес, пол, номер телефона и мой виновник, день рождения.
У меня есть страница, которая позволяет пользователям редактировать эти поля: она состоит из текстового поля с автозаполнением, в котором пользователи могут ввести идентификатор человека или его часть и выбрать человека, которого они хотят редактировать, из раскрывающегося списка. Остальная часть страницы представляет собой список текстовых полей, связанных с моделями Wicket для Person, которого пользователи выбирают из списка: когда это происходит, каждое текстовое поле корректно заполняется свойствами выбранного объекта Person.
Краткий пример Java, представляющего текстовые поля и их модель:
private Person person;
[...]
formPatient = new Form("patientForm", new PropertyModel<>(this, "person"));
[...]
formPatient.add(tmp = new MyTextField<>("nome", new PropertyModel<>(this, "person.nome")));
formPatient.add(tmp = new MyTextField<>("secondoNome", new PropertyModel<>(this, "person.secondoNome")));
formPatient.add(tmp = new MyTextField<>("cognome", new PropertyModel<>(this, "person.cognome")));
DropDownChoice sessoDDC = new DropDownChoice("sesso", new PropertyModel<>(this, "person.sesso"), Arrays.asList(Enums.Sex.values()));
formPatient.add(sessoDDC);
formPatient.add(dtf = new DateTextField("bday", new PropertyModel<Date>(this, "person.bday"), "dd/MM/yyyy"));
[...]
Это прекрасно работает, как я уже сказал. Но для поля дня рождения мне нужно использовать текстовое поле с календарем. Это можно легко упорядочить, просто изменив соответствующую разметку HTML с
<input style="display: table-cell;" type="text" wicket:id="bday"/>
до
<input style="display: table-cell;" type="date" wicket:id="bday"/>
для того, чтобы иметь удобный и удобный инструмент для выбора даты.
Проблема в том, что, когда для типа HTML установлено значение «date», функция автообновления перестает работать: DateTextField всегда показывает текст по умолчанию «dd / MM / yyyy», а не реальную дату. Все остальные поля все еще обновляются, когда пользователь выбирает человека из списка (даже в раскрывающемся списке, представляющем пол), поэтому механизм модели Wicket все еще работает.
Я попытался переопределить методы, оба из PropertyModel и DateTextField, чтобы посмотреть, не потеряется ли в какой-то момент объект модели, связанный с DateTextField, или что-то в этом роде, но он всегда там, хотя он и не представлен. Я также обнаружил, что окончательный HTML-код выглядит так:
<input style="display: table-cell;" type="text" wicket:id="bday" value="01/01/2011" name="bday">
поэтому информация о дате имеется, даже если само текстовое поле, кажется, не может ее отобразить.
Любая помощь приветствуется. Если вам нужно больше информации или кода, просто дайте мне знать.