vaadin JPA контейнер и проблема вложенных свойств

У меня есть сущность ExchangeRate {date, currencyFrom, rate} . Сущность currencyFrom имеет свойства code и Name. Я добавляю его в контейнер addNestedContainerProperty("currencyFrom.code"); работает без проблем и код отображается в таблице vaadin.

Теперь я создаю BeanValidationForm и добавляю это поле к нему. Это происходит сбой, потому что BeanValidationValidator пытается найти геттер для currencyFrom.code и ищет метод getCurrencyFrom.code внутри ExchangeRate.

  1. В чем дело? Как я могу использовать вложенное свойство поля в форме для отображения некоторой информации.

  2. Можно ли изменить вложенные свойства ExchangeRate?

1 ответ

Ответ есть: форум vaadin

  1. BeanValidationForm предполагает, что все свойства находятся в основном классе бина - он ничего не знает о JPAContainer или вложенных свойствах. Обратите внимание, что аннотации проверки bean-компонента JSR-303 доступны непосредственно из класса bean-компонента, а не через контейнер.

Чтобы обойти это, вы должны предоставить правильный класс bean-компонента каждому созданному BeanValidationValidator - либо переопределить BeanValidationForm.addField() и присвоить BVV.addValidator() правильный класс, либо использовать BVV напрямую вместо использования вспомогательного класса BeanValidationForm.

  1. Это должно быть возможно (по крайней мере, с подходящими настройками каскада) - но если у вас есть отдельные EntityProviders для класса вложенных экземпляров, они не будут уведомлены об изменениях, если вы сохраните вложенный объект как часть основного объекта.
Другие вопросы по тегам