К сожалению, мы не можем гарантировать, что то, что вы делаете напрямую с Vaadin компонентами, не поменяется и продолжит работать. Более того, поддержать поведение setValue в обход нашего API мы не сможем.
Расскажите о вашем специфичном случае, возможно есть более адекватное решение, чем вмешиваться в работу компонентов.
Мне не до конца понятна та проблема и нет кода, где бы мы могли воспроизвести её, но кажется ваша исходная проблема должна исчезнуть в версии 7. Попробуйте, пожалуйста, начать с неё и не использовать этот обходной путь.
С этим и была связана пауза в ответе. Дошли руки проверить не изменилось ли поведение в версии 7. Оно не изменилось.
Проблема на самом деле проста. При использовании кастомного datatype результат введенный с клавиатуры и результат установленный с помощью метода setValue() различаются. Велика вероятность, конечно, что я сам где-то косячу…
Я думаю, что смогу предоставить тестовый проект для демонстрации проблемы, но позднее. Сейчас это не первоочередная задача.
Нажать кнопку Value=10
Результат: в поле установлено значение 5, в БД будет сохранено 10.
Ожидаемое поведение: в поле установлено значение 10, в БД сохранено 20.
Возможно, я чего-то не понимаю. Когда вы устанавливаете в сущность значение, то именно это значение будет сохранено в БД.
В вашем примере вы явно ставите в сущность 10, соответственно и сохраняется 10. Т.е. чтобы вам сохранить 20, то и ставить надо 20. При программной установке значения компонент не разбирает ваше значение заново, он просто использует готовое значение.
Юрий, думаю, что это я чего-то не понимаю…
В моем представлении устанавливаемое значение должно пройти трансформацию через DataType прежде чем быть установленным в сущность. Не важно в форме мы его вводим или с помощью сеттера (сейчас написал “сеттер” и стало понятно, что я ошибался).
Что можете посоветовать при условии, что:
Общая задача описана тут (собственно первые два сообщения):
Т.е. вся логика преобразования у меня спрятана в DataType.
Во фреймворке это не так, все операции со значениями - операции с данными, не с представлением. А Datatype используется только для представления данных в UI. Т.е. когда вы устанавливаете значение через сущность или через UI component - это всегда работа без учёта того, как данные выглядят на экране.