Компонент vaadin с автопроводкой получает индекс -1

Я использую ваадин-пружину. я создал public abstract class AbstractBasicVerticalLayoutWithMenu extends HorizontalLayout implements View и у меня есть два нормальных класса, расширяющих его. В абстрактном классе я @Autowire Определен компонент меню:

@UIScope @SpringComponent public class Menu extends CssLayout

оба класса аннотированы

@UIScope @SpringView

У меня очень странная проблема в одном из представлений, что мой компонент меню не отображается.

Я немного покопался и добавил логи. На

@Override public void enter(ViewChangeEvent event)

Метод, который я добавил протоколирование и перепробовал много веток, и я обнаружил, что когда я делаю this.getComponentIndex(menu) этот неправильный компонент представления имеет индекс -1!

Интересно, что если я удаляю правильно отображаемый вид из навигатора (я делаю это: getNavigator().addView(FirstTesterView.VIEW_NAME, firstTesterView);) тогда это неправильное представление вернулось к исправлению.

Я понятия не имею, почему, но похоже, что только первый из экземпляров классов, расширяющих acstract, получает компонент @Autowired, но не следующий.

Что я делаю не так?

1 ответ

Решение

Индекс -1 означает, что компонент не был найден среди дочерних элементов.

Теперь, если ваш компонент одноэлементный, который является областью по умолчанию для пружинного компонента, вы всегда получаете один и тот же экземпляр. Кроме того, компонент Vaadin может иметь только одного родителя в любой момент времени, поэтому, возможно, вы пропустили некоторые IllegalStateException в журнале.

Чтобы это исправить, вы можете установить область действия вашего меню на прототип, чтобы вы каждый раз получали новый экземпляр.

Другие вопросы по тегам