Как использовать NestedBeanPropertyDefinition в Vaadin 12.0.7?

#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 используется только внутри. При привязке к строке имени свойства проверяется, есть ли в этой строке . . если да, он автоматически создаст и вернет NestedPropertyDefinitions

4. Ах, ты прав. Как я мог не найти это? Спасибо за вашу помощь и предоставление информации, высоко ценится!

Ответ №1:

Я обнаружил, что это:

 binder.forField(new TextField()).bind("sub.name")
  

работает в Vaadin 12.0.7. Это также относится к сеткам и связующим. По-видимому, нет необходимости использовать NestedPropertyDefinitions для достижения вложенных привязок. У меня была ошибка на моей серверной части, которая вызвала ошибку, которая заставила меня предположить, что привязка не работала должным образом. Итак, я все еще не могу сказать, есть ли другой способ достичь этого или что NestedPropertyDefinitions делать, но я бы предположил, что они используются Vaadin внутренне.

Согласно комментарию Cashbees, он NestedPropertyDefinitions используется только внутри, а на то, как обращаться с вложенными свойствами, косвенно ссылаются в этой документации.