Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
FormField commit Непрвильное отображение после commit
Доброго времени суток, уважаемые форумчане. Очень рад, что есть русскоязычный форум. Сначала не заметил.
Встретился с вот такой проблемой. Есть FieldGroup и FormLayout. "Лежат" они поверх Window. Есть 2 DateField'а, которые должны давать возможность выбрать начало и конец какого-нибудь события(мероприятия) в календаре. (Vaadin Calendar addon используется). DateField'ы созданы и добавлены в FormLayout, потом они забайндены(binded) к FieldGroup. Проблема в том, что после нажатия на кнопку "Применить", вызывается метод Fieldgroup.commit(), и получаются разные данные.
fieldGroup.setBuffered(true); fieldGroup.setItemDataSource(item); были вызваны.
BeanItem<CalendarEvent> someItem = (BeanItem<CalendarEvent>) fieldGroup.getItemDataSource();
CalendarEvent someEvent = someItem.getBean();
System.out.println("inside commitCalendarEvent() before commit--->");
System.out.println("event.getStart --->" + someEvent.getStart());
System.out.println("event.getEnd --->" + someEvent.getEnd());
fieldGroup.commit();
BeanItem<CalendarEvent> someItem2 = (BeanItem<CalendarEvent>) fieldGroup.getItemDataSource();
CalendarEvent someEvent2 = someItem2.getBean();
System.out.println("inside commitCalendarEvent() after commit--->");
System.out.println("event.getStart --->" + someEvent2.getStart());
System.out.println("event.getEnd --->" + someEvent2.getEnd());
Заранее благодарю.
Что значит "получаются разные данные" ? Оличные от того что Вы хотите получить ? Или разные до вызова commit и после ? Сформулируйте пожалуйста вопрос точнее. Из текущего описания я проблемы не понял.
Denis Anisimov: Что значит "получаются разные данные" ? Оличные от того что Вы хотите получить ? Или разные до вызова commit и после ? Сформулируйте пожалуйста вопрос точнее. Из текущего описания я проблемы не понял.
Здравствуйте...
Отличные от того, что хотелось бы получить. Давайте я приведу пример вывода:
inside commitCalendarEvent() before commit--->
event.getStart --->Wed Jun 26 14:00:00 ALMT 2013
event.getEnd --->Wed Jun 26 17:00:00 ALMT 2013
inside commitCalendarEvent() after commit--->
event.getStart --->Wed Jun 26 17:00:00 ALMT 2013
event.getEnd --->Wed Jun 26 17:00:00 ALMT 2013
Ведь и после commit() данные должны были сохраниться, как я полагаю.
Всё равно непонятны все вызовы.
FieldGroup используется для того чтобы данные не отправлялись на сервер до того как вызван commit(), кот. позволяет выполнить отправку данных атомарно, пропустив данные формы ещё и через валидаторы.
Поля формы ещё и привязываются к бину, что позволяет автоматически обновлять бин при вызове commit().
FormLayout в данном вопросе никакой роли не играет.
Если Вы выставили каким нибудь полям свойство immediate, то данные этого поля всё равно уйдут на
сервер после изменений в поле, даже если они и в FieldGroup.
commit() обычно вызывается в обработчике кнопки (submit) для формы. Пользователь выставляет значения в
поля формы (через UI), еcли immediate не выставлен, то значения на сервер в этот момент не уходят.
Потом, после нажатия кнопки вызывается commit() (это уже забота вашей реализации) и свойства бина
обновляются все скопом.
Для того чтобы поля трактовались как поля одной формы нужен какой нибудь из вызовов bind, например
bind(Field<?> field, java.lang.Object propertyId)
Не работать может по причине непрохождения валидаторов, отсутствия привязки к форме (нет нужного bind),..
Из вашего примера не видно в какой момент Вы вызываете commit() и не вижу bind(). Так что непонятна последовательность вызовов.
Спасибо за объяснение.
Проблема решилась тем, что надо было использовать класс-обертку, который расширял BasicEvent.