vaadin JPA контейнер и проблема вложенных свойств
У меня есть сущность ExchangeRate {date, currencyFrom, rate} . Сущность currencyFrom имеет свойства code и Name. Я добавляю его в контейнер addNestedContainerProperty("currencyFrom.code"); работает без проблем и код отображается в таблице vaadin.
Теперь я создаю BeanValidationForm и добавляю это поле к нему. Это происходит сбой, потому что BeanValidationValidator пытается найти геттер для currencyFrom.code и ищет метод getCurrencyFrom.code внутри ExchangeRate.
В чем дело? Как я могу использовать вложенное свойство поля в форме для отображения некоторой информации.
Можно ли изменить вложенные свойства ExchangeRate?
1 ответ
Ответ есть: форум vaadin
- BeanValidationForm предполагает, что все свойства находятся в основном классе бина - он ничего не знает о JPAContainer или вложенных свойствах. Обратите внимание, что аннотации проверки bean-компонента JSR-303 доступны непосредственно из класса bean-компонента, а не через контейнер.
Чтобы обойти это, вы должны предоставить правильный класс bean-компонента каждому созданному BeanValidationValidator - либо переопределить BeanValidationForm.addField() и присвоить BVV.addValidator() правильный класс, либо использовать BVV напрямую вместо использования вспомогательного класса BeanValidationForm.
- Это должно быть возможно (по крайней мере, с подходящими настройками каскада) - но если у вас есть отдельные EntityProviders для класса вложенных экземпляров, они не будут уведомлены об изменениях, если вы сохраните вложенный объект как часть основного объекта.