Компонент 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
в журнале.
Чтобы это исправить, вы можете установить область действия вашего меню на прототип, чтобы вы каждый раз получали новый экземпляр.