Доброго времени суток, уважаемые форумчане. Очень рад, что есть русскоязычный форум. Сначала не заметил.
Встретился с вот такой проблемой. Есть FieldGroup и FormLayout. “Лежат” они поверх Window. Есть 2 DateField’а, которые должны давать возможность выбрать начало и конец какого-нибудь события(мероприятия) в календаре. (Vaadin Calendar addon используется). DateField’ы созданы и добавлены в FormLayout, потом они забайндены(binded) к FieldGroup. Проблема в том, что после нажатия на кнопку “Применить”, вызывается метод Fieldgroup.commit(), и получаются разные данные.
fieldGroup.setBuffered(true); fieldGroup.setItemDataSource(item); были вызваны.
Что значит “получаются разные данные” ? Оличные от того что Вы хотите получить ? Или разные до вызова commit и после ? Сформулируйте пожалуйста вопрос точнее. Из текущего описания я проблемы не понял.
Всё равно непонятны все вызовы.
FieldGroup используется для того чтобы данные не отправлялись на сервер до того как вызван commit(), кот. позволяет выполнить отправку данных атомарно, пропустив данные формы ещё и через валидаторы.
Поля формы ещё и привязываются к бину, что позволяет автоматически обновлять бин при вызове commit().
FormLayout в данном вопросе никакой роли не играет.
Если Вы выставили каким нибудь полям свойство immediate, то данные этого поля всё равно уйдут на
сервер после изменений в поле, даже если они и в FieldGroup.
commit() обычно вызывается в обработчике кнопки (submit) для формы. Пользователь выставляет значения в
поля формы (через UI), еcли immediate не выставлен, то значения на сервер в этот момент не уходят.
Потом, после нажатия кнопки вызывается commit() (это уже забота вашей реализации) и свойства бина
обновляются все скопом.
Для того чтобы поля трактовались как поля одной формы нужен какой нибудь из вызовов bind, например
bind(Field<?> field, java.lang.Object propertyId)
Не работать может по причине непрохождения валидаторов, отсутствия привязки к форме (нет нужного bind),…
Из вашего примера не видно в какой момент Вы вызываете commit() и не вижу bind(). Так что непонятна последовательность вызовов.