#java #vaadin #vaadin10
#java #vaadin #vaadin10
Вопрос:
В настоящее время я пытаюсь использовать связующее в Vaadin для доступа к вложенному свойству объекта. Немного погуглив, я нашел справочный пример, который довольно хорошо описывает мою проблему (оригинальный пост).:
Предположим, у вас есть 2 компонента:
public class Bean {
private SubBean sub;
// getter setter
}
public class SubBean {
private String name;
// getter setter
Вы думаете, вы должны быть в состоянии сделать что-то подобное:
Binder<Bean> binder = new Binder<>(Bean.class);
binder.bind(new TextField(), "sub.name");
Каким образом это приводит к исключению. После обсуждения репозитория Vaadins эта проблема была закрыта с помощью чего-то под названием NestedPropertyDefinitions
(потенциальное решение, упомянутое в обсуждении проблемы, которое привело к закрытию проблемы).
Я искал его, но просто нашел какую-либо информацию о том, как его использовать или как легко получить доступ к вложенным свойствам с помощью системы привязки Vaadin, за исключением этой документации.
Кто-нибудь может объяснить мне, как использовать NestedPropertyDefinitions
?
Комментарии:
1. IIRC,
binder.bind(new TextField(), "sub.name");
это просто краткая форма дляbinder.forField(new TextField()).bind("sub.name");
. Вы абсолютно уверены, что одно работает, а другое нет?2. Спасибо за ваш ответ. Ошибка была на моей стороне! Я обновил свой вопрос. Было бы здорово, если бы разработчики Vaadin могли добавить вложенный пример на эту страницу: vaadin.com/docs/flow/binding-data /…
3. Я думаю, что это упоминается в 3 пунктах подменю ниже: Привязка компонентов к формам . Ну, не упоминается словами, но используется в первом примере кода. И да
NestedPropertyDefinitions
используется только внутри. При привязке к строке имени свойства проверяется, есть ли в этой строке.
. если да, он автоматически создаст и вернет NestedPropertyDefinitions4. Ах, ты прав. Как я мог не найти это? Спасибо за вашу помощь и предоставление информации, высоко ценится!
Ответ №1:
Я обнаружил, что это:
binder.forField(new TextField()).bind("sub.name")
работает в Vaadin 12.0.7. Это также относится к сеткам и связующим. По-видимому, нет необходимости использовать NestedPropertyDefinitions
для достижения вложенных привязок. У меня была ошибка на моей серверной части, которая вызвала ошибку, которая заставила меня предположить, что привязка не работала должным образом. Итак, я все еще не могу сказать, есть ли другой способ достичь этого или что NestedPropertyDefinitions
делать, но я бы предположил, что они используются Vaadin внутренне.
Согласно комментарию Cashbees, он NestedPropertyDefinitions
используется только внутри, а на то, как обращаться с вложенными свойствами, косвенно ссылаются в этой документации.